You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
packer/vendor/github.com/linode/linodego
Adrien Delorme 1d00daedac
replace github.com/gofrs/flock => github.com/azr/flock v0.0.0-20190823144736-958d66434653
7 years ago
..
.gitignore update vendor/ for linode builder 7 years ago
.travis.yml update vendor/ for linode builder 7 years ago
API_SUPPORT.md update vendor/ for linode builder 7 years ago
CHANGELOG.md update vendor/ for linode builder 7 years ago
Gopkg.lock update vendor/ for linode builder 7 years ago
Gopkg.toml update vendor/ for linode builder 7 years ago
LICENSE update vendor/ for linode builder 7 years ago
Makefile update vendor/ for linode builder 7 years ago
README.md update vendor/ for linode builder 7 years ago
account.go update vendor/ for linode builder 7 years ago
account_events.go update vendor/ for linode builder 7 years ago
account_invoices.go update vendor/ for linode builder 7 years ago
account_notifications.go update vendor/ for linode builder 7 years ago
account_users.go update vendor/ for linode builder 7 years ago
client.go update vendor/ for linode builder 7 years ago
domain_records.go update vendor/ for linode builder 7 years ago
domains.go update vendor/ for linode builder 7 years ago
env.sample update vendor/ for linode builder 7 years ago
errors.go update vendor/ for linode builder 7 years ago
images.go update vendor/ for linode builder 7 years ago
instance_configs.go update vendor/ for linode builder 7 years ago
instance_disks.go update vendor/ for linode builder 7 years ago
instance_ips.go update vendor/ for linode builder 7 years ago
instance_snapshots.go update vendor/ for linode builder 7 years ago
instance_volumes.go update vendor/ for linode builder 7 years ago
instances.go update vendor/ for linode builder 7 years ago
kernels.go update vendor/ for linode builder 7 years ago
longview.go update vendor/ for linode builder 7 years ago
longview_subscriptions.go update vendor/ for linode builder 7 years ago
managed.go update vendor/ for linode builder 7 years ago
network_ips.go update vendor/ for linode builder 7 years ago
network_pools.go update vendor/ for linode builder 7 years ago
network_ranges.go update vendor/ for linode builder 7 years ago
nodebalancer.go update vendor/ for linode builder 7 years ago
nodebalancer_config_nodes.go update vendor/ for linode builder 7 years ago
nodebalancer_configs.go update vendor/ for linode builder 7 years ago
pagination.go update vendor/ for linode builder 7 years ago
profile.go update vendor/ for linode builder 7 years ago
profile_sshkeys.go update vendor/ for linode builder 7 years ago
profile_tokens.go update vendor/ for linode builder 7 years ago
regions.go update vendor/ for linode builder 7 years ago
resources.go update vendor/ for linode builder 7 years ago
stackscripts.go update vendor/ for linode builder 7 years ago
support.go update vendor/ for linode builder 7 years ago
tags.go update vendor/ for linode builder 7 years ago
types.go update vendor/ for linode builder 7 years ago
util.go update vendor/ for linode builder 7 years ago
volumes.go update vendor/ for linode builder 7 years ago
waitfor.go update vendor/ for linode builder 7 years ago

README.md

linodego

Build Status GoDoc Go Report Card codecov

Go client for Linode REST v4 API

Installation

go get -u github.com/linode/linodego

API Support

Check API_SUPPORT.md for current support of the Linode v4 API endpoints.

** Note: This project will change and break until we release a v1.0.0 tagged version. Breaking changes in v0.x.x will be denoted with a minor version bump (v0.2.4 -> v0.3.0) **

Documentation

See godoc for a complete reference.

The API generally follows the naming patterns prescribed in the OpenAPIv3 document for Linode APIv4.

Deviations in naming have been made to avoid using "Linode" and "Instance" redundantly or inconsistently.

A brief summary of the features offered in this API client are shown here.

Examples

General Usage

package main

import (
	"context"
	"fmt"

	"github.com/linode/linodego"
	"golang.org/x/oauth2"

	"log"
	"net/http"
	"os"
)

func main() {
  apiKey, ok := os.LookupEnv("LINODE_TOKEN")
  if !ok {
    log.Fatal("Could not find LINODE_TOKEN, please assert it is set.")
  }
  tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: apiKey})

  oauth2Client := &http.Client{
    Transport: &oauth2.Transport{
      Source: tokenSource,
    },
  }

  linodeClient := linodego.NewClient(oauth2Client)
  linodeClient.SetDebug(true)
  
  res, err := linodeClient.GetInstance(context.Background(), 4090913)
  if err != nil {
    log.Fatal(err)
  }
  fmt.Printf("%v", res)
}

Pagination

Auto-Pagination Requests

kernels, err := linodego.ListKernels(context.Background(), nil)
// len(kernels) == 218

Or, use a page value of "0":

opts := NewListOptions(0,"")
kernels, err := linodego.ListKernels(context.Background(), opts)
// len(kernels) == 218

Single Page

opts := NewListOptions(2,"")
// or opts := ListOptions{PageOptions: &PageOptions: {Page: 2 }}
kernels, err := linodego.ListKernels(context.Background(), opts)
// len(kernels) == 100

ListOptions are supplied as a pointer because the Pages and Results values are set in the supplied ListOptions.

// opts.Results == 218

Filtering

opts := ListOptions{Filter: "{\"mine\":true}"}
// or opts := NewListOptions(0, "{\"mine\":true}")
stackscripts, err := linodego.ListStackscripts(context.Background(), opts)

Error Handling

Getting Single Entities

linode, err := linodego.GetLinode(context.Background(), 555) // any Linode ID that does not exist or is not yours
// linode == nil: true
// err.Error() == "[404] Not Found"
// err.Code == "404"
// err.Message == "Not Found"

Lists

For lists, the list is still returned as [], but err works the same way as on the Get request.

linodes, err := linodego.ListLinodes(context.Background(), NewListOptions(0, "{\"foo\":bar}"))
// linodes == []
// err.Error() == "[400] [X-Filter] Cannot filter on foo"

Otherwise sane requests beyond the last page do not trigger an error, just an empty result:

linodes, err := linodego.ListLinodes(context.Background(), NewListOptions(9999, ""))
// linodes == []
// err = nil

Writes

When performing a POST or PUT request, multiple field related errors will be returned as a single error, currently like:

// err.Error() == "[400] [field1] foo problem; [field2] bar problem; [field3] baz problem"

Tests

Run make test to run the unit tests. This is the same as running go test except that make test will execute the tests while playing back API response fixtures that were recorded during a previous development build.

go test can be used without the fixtures. Copy env.sample to .env and configure your persistent test settings, including an API token.

go test -short can be used to run live API tests that do not require an account token.

This will be simplified in future versions.

To update the test fixtures, run make fixtures. This will record the API responses into the fixtures/ directory. Be careful about committing any sensitive account details. An attempt has been made to sanitize IP addresses and dates, but no automated sanitization will be performed against fixtures/*Account*.yaml, for example.

To prevent disrupting unaffected fixtures, target fixture generation like so: make ARGS="-run TestListVolumes" fixtures.

Discussion / Help

Join us at #linodego on the gophers slack

License

MIT License