Coder Social home page Coder Social logo

gosdc's Introduction

gosdc

wercker status

gosdc is a Go client for Joyent's SmartDataCenter

Table of Contents

Usage

To create a client (*cloudapi.Client), you'll need a few things:

  1. your account ID
  2. the ID of the key associated with your account
  3. your private key material
  4. the cloud endpoint you want to use (for example https://us-east-1.api.joyentcloud.com)

Given these four pieces of information, you can initialize a client with the following:

package main

import (
	"io/ioutil"
	"log"
	"os"

	"github.com/joyent/gocommon/client"
	"github.com/joyent/gosdc/cloudapi"
	"github.com/joyent/gosign/auth"
)

func client(key, keyId, account, endpoint string) (*cloudapi.Client, error) {
	keyData, err := ioutil.ReadFile(key)
	if err != nil {
		return nil, err
	}
	userAuth, err := auth.NewAuth(account, string(keyData), "rsa-sha256")
	if err != nil {
		return nil, err
	}

	creds := &auth.Credentials{
		UserAuthentication: auth,
		SdcKeyId:           keyId,
		SdcEndpoint:        auth.Endpoint{URL: endpoint},
	}

	return cloudapi.New(client.NewClient(
		creds.SdcEndpoint.URL,
		cloudapi.DefaultAPIVersion,
		creds,
		log.New(os.Stderr, "", log.LstdFlags),
	)), nil
}

Examples

Projects using the gosdc API:

Resources

After creating a client, you can manipulate resources in the following ways:

Resource Create Read Update Delete Extra
Datacenters GetDatacenter, ListDatacenters
Firewall Rules CreateFirewallRule GetFirewallRule, ListFirewallRules, ListmachineFirewallRules UpdateFirewallRule, EnableFirewallRule, DisableFirewallRule DeleteFirewallRule
Instrumentations CreateInstrumentation GetInstrumentation, ListInstrumentations, GetInstrumentationHeatmap, GetInstrumentationHeatmapDetails, GetInstrumentationValue DeleteInstrumentation DescribeAnalytics
Keys CreateKey GetKey, ListKeys DeleteKey
Machines CreateMachine GetMachine, ListMachines, ListFirewallRuleMachines RenameMachine, ResizeMachine DeleteMachine CountMachines, MachineAudit, StartMachine, StartMachineFromSnapshot, StopMachine, RebootMachine
Machine (Images) CreateImageFromMachine GetImage, ListImages DeleteImage ExportImage
Machine (Metadata) GetMachineMetadata UpdateMachineMetadata DeleteMachineMetadata, DeleteAllMachineMetadata
Machine (Snapshots) CreateMachineSnapshot GetMachineSnapshot, ListMachineSnapshots DeleteMachineSnapshot
Machine (Tags) GetMachineTag, ListMachineTags AddMachineTags, ReplaceMachineTags DeleteMachineTag, DeleteMachineTags EnableFirewallMachine, DisableFirewallMachine
Networks GetNetwork, ListNetworks
Packages GetPackage, ListPackages

Contributing

Report bugs and request features using GitHub Issues, or contribute code via a GitHub Pull Request. Changes will be code reviewed before merging. In the near future, automated tests will be run, but in the meantime please go fmt, go lint, and test all contributions.

Developing

This library assumes a Go development environment setup based on How to Write Go Code. Your GOPATH environment variable should be pointed at your workspace directory.

You can now use go get github.com/joyent/gosdc to install the repository to the correct location, but if you are intending on contributing back a change you may want to consider cloning the repository via git yourself. This way you can have a single source tree for all Joyent Go projects with each repo having two remotes -- your own fork on GitHub and the upstream origin.

For example if your GOPATH is ~/src/joyent/go and you're working on multiple repos then that directory tree might look like:

~/src/joyent/go/
|_ pkg/
|_ src/
   |_ github.com
      |_ joyent
         |_ gocommon
         |_ gomanta
         |_ gosdc
         |_ gosign

Recommended Setup

$ mkdir -p ${GOPATH}/src/github.com/joyent
$ cd ${GOPATH}/src/github.com/joyent
$ git clone [email protected]:<yourname>/gosdc.git

# fetch dependencies
$ git clone [email protected]:<yourname>/gocommon.git
$ git clone [email protected]:<yourname>/gosign.git
$ go get -v -t ./...

# add upstream remote
$ cd gosdc
$ git remote add upstream [email protected]:joyent/gosdc.git
$ git remote -v
origin  [email protected]:<yourname>/gosdc.git (fetch)
origin  [email protected]:<yourname>/gosdc.git (push)
upstream        [email protected]:joyent/gosdc.git (fetch)
upstream        [email protected]:joyent/gosdc.git (push)

Run Tests

You can run the tests either locally or against live Triton. If you want to run the tests locally you'll want to generate an SSH key and pass the appropriate flags to the test harness as shown below.

cd ${GOPATH}/src/github.com/joyent/gosdc
ssh-keygen -b 2048 -C "Testing Key" -f test_key.id_rsa -t rsa -P ""
env KEY_NAME=`pwd`/test_key.id_rsa LIVE=false go test ./...

Build the Library

cd ${GOPATH}/src/github.com/joyent/gosdc
go build ./...

License

gosdc is licensed under the Mozilla Public License Version 2.0, a copy of which is available at LICENSE

gosdc's People

Contributors

bcantrill avatar brianhicks avatar cehoffman avatar chrisaubuchon avatar dstroppa avatar jclulow avatar jen20 avatar misterbisson avatar namtzigla avatar sodre avatar tgross avatar tianon avatar wallyworld avatar xer0x avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.