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)
|
Forward().Install(back)
|
||||||
CloudBackend().Install(back)
|
CloudBackend().Install(back)
|
||||||
Tutum().Install(back)
|
Tutum().Install(back)
|
||||||
|
Shipyard().Install(back)
|
||||||
return 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