mirror of https://github.com/docker/docs.git
Merge pull request #37 from cpuguy83/add_shipyard_backend
This commit is contained in:
commit
51a688c0c5
|
@ -19,5 +19,6 @@ func New() *engine.Engine {
|
|||
Forward().Install(back)
|
||||
CloudBackend().Install(back)
|
||||
Tutum().Install(back)
|
||||
Shipyard().Install(back)
|
||||
return back
|
||||
}
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
package backends
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/dotcloud/docker/engine"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Shipyard() engine.Installer {
|
||||
return &shipyard{}
|
||||
}
|
||||
|
||||
type shipyard struct {
|
||||
url, user, pass string
|
||||
}
|
||||
|
||||
func (s *shipyard) Install(eng *engine.Engine) error {
|
||||
eng.Register("shipyard", func(job *engine.Job) engine.Status {
|
||||
if len(job.Args) != 3 {
|
||||
return job.Errorf("usage: <shipyard url> <user> <pass>")
|
||||
}
|
||||
s.url = job.Args[0]
|
||||
s.user = job.Args[1]
|
||||
s.pass = job.Args[2]
|
||||
job.Eng.Register("containers", s.containers)
|
||||
job.Eng.Register("container_inspect", s.container_inspect)
|
||||
return engine.StatusOK
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *shipyard) containers(job *engine.Job) engine.Status {
|
||||
var args string
|
||||
if job.Getenv("limit") != "" {
|
||||
args = fmt.Sprintf("%s&limit=%s", args, url.QueryEscape(job.Getenv("limit")))
|
||||
}
|
||||
if job.Getenv("offset") != "" {
|
||||
args = fmt.Sprintf("%s&offset=%s", args, url.QueryEscape(job.Getenv("offset")))
|
||||
}
|
||||
|
||||
path := fmt.Sprintf("containers/?%s", args)
|
||||
out, err := c.gateway("GET", path, "")
|
||||
if err != nil {
|
||||
return job.Errorf("%s: get: %v", path, err)
|
||||
}
|
||||
log.Printf("%s", out)
|
||||
return engine.StatusOK
|
||||
}
|
||||
|
||||
func (c *shipyard) container_inspect(job *engine.Job) engine.Status {
|
||||
path := fmt.Sprintf("containers/details/%s", job.Args[0])
|
||||
out, err := c.gateway("GET", path, "")
|
||||
if err != nil {
|
||||
return job.Errorf("%s: get: %v", path, err)
|
||||
}
|
||||
log.Printf("%s", out)
|
||||
return engine.StatusOK
|
||||
}
|
||||
|
||||
func (c *shipyard) gateway(method, path, body string) ([]byte, error) {
|
||||
apiPath := fmt.Sprintf("%s/api/v1/%s&format=json", c.url, path)
|
||||
url, err := url.Parse(apiPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req, err := http.NewRequest(method, url.String(), strings.NewReader(body))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req.Header.Set("Authorization", "ApiKey "+c.api_key())
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
defer resp.Body.Close()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
out, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *shipyard) api_key() string {
|
||||
return c.user + ":" + c.pass
|
||||
}
|
Loading…
Reference in New Issue