Skip to content

Commit

Permalink
Merge 9f94bd0 into a2d731f
Browse files Browse the repository at this point in the history
  • Loading branch information
mrjana committed Feb 10, 2015
2 parents a2d731f + 9f94bd0 commit 44af3d1
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 35 deletions.
2 changes: 2 additions & 0 deletions adapters.yml
Expand Up @@ -4,5 +4,7 @@ endpoints:
pre: [socketplane]
"POST /*/containers/*/start":
post: [socketplane]
"DELETE /*/containers/*":
post: [socketplane]
adapters:
socketplane: http://localhost:6675/adapter
1 change: 1 addition & 0 deletions daemon/bridge.go
Expand Up @@ -196,6 +196,7 @@ func ConnectionRPCHandler(d *Daemon) {
case ConnectionDelete:
DeleteConnection(c.Connection.ConnectionDetails)
delete(d.Connections, c.Connection.ContainerID)
c.Result <- c.Connection
}
}
}
Expand Down
94 changes: 59 additions & 35 deletions daemon/powerstrip.go
Expand Up @@ -44,74 +44,98 @@ type adapterPostResponse struct {
}
}

func psAdapterPreHook(d *Daemon, reqParams adapterRequest) *adapterPreResponse {
func psAdapterPreHook(d *Daemon, reqParams adapterRequest) (preResp *adapterPreResponse) {
preResp = &adapterPreResponse{}
preResp.PowerstripProtocolVersion = reqParams.PowerstripProtocolVersion
preResp.ModifiedClientRequest.Method = reqParams.ClientRequest.Method
preResp.ModifiedClientRequest.Request = reqParams.ClientRequest.Request
preResp.ModifiedClientRequest.Body = reqParams.ClientRequest.Body

if reqParams.ClientRequest.Body != "" {
jsonBody := &dockerclient.ContainerConfig{}
err := json.Unmarshal([]byte(reqParams.ClientRequest.Body), &jsonBody)
if err != nil {
fmt.Println("Body JSON unmarsall failed", err)
fmt.Println("Body JSON unmarshall failed", err)
}

jsonBody.HostConfig.NetworkMode = "none"

preResp := &adapterPreResponse{}
preResp.PowerstripProtocolVersion = reqParams.PowerstripProtocolVersion
preResp.ModifiedClientRequest.Method = reqParams.ClientRequest.Method
preResp.ModifiedClientRequest.Request = reqParams.ClientRequest.Request

body, _ := json.Marshal(jsonBody)
preResp.ModifiedClientRequest.Body = string(body)

return preResp
}
return nil

return
}

func psAdapterPostHook(d *Daemon, reqParams adapterRequest) *adapterPostResponse {
func psAdapterPostHook(d *Daemon, reqParams adapterRequest) (postResp *adapterPostResponse) {
postResp = &adapterPostResponse{}
postResp.PowerstripProtocolVersion = reqParams.PowerstripProtocolVersion
postResp.ModifiedServerResponse.ContentType = "application/json"
postResp.ModifiedServerResponse.Body = reqParams.ServerResponse.Body
postResp.ModifiedServerResponse.Code = reqParams.ServerResponse.Code

if reqParams.ClientRequest.Method != "POST" &&
reqParams.ClientRequest.Method != "DELETE" {
fmt.Println("Invalid method: ", reqParams.ClientRequest.Method)
postResp.ModifiedServerResponse.Code = 500
return
}

if reqParams.ClientRequest.Request != "" {
// start api looks like this /<version>/containers/<cid>/start
s := regexp.MustCompile("/").Split(reqParams.ClientRequest.Request, 5)
cid := s[3]

docker, _ := dockerclient.NewDockerClient(
"unix:///var/run/docker.sock", nil)
info, err := docker.InspectContainer(cid)
if err != nil {
fmt.Println("InspectContainer failed", err)
}
var cfg = &Connection{}
var op = ConnectionAdd

switch reqParams.ClientRequest.Method {
case "POST":
docker, _ := dockerclient.NewDockerClient(
"unix:///var/run/docker.sock", nil)
info, err := docker.InspectContainer(cid)
if err != nil {
fmt.Println("InspectContainer failed", err)
postResp.ModifiedServerResponse.Code = 404
return
}

cfg := &Connection{}
cfg.ContainerID = string(cid)
cfg.ContainerName = info.Name
cfg.ContainerPID = strconv.Itoa(info.State.Pid)
cfg.Network = DefaultNetworkName
for _, env := range info.Config.Env {
val := regexp.MustCompile("=").Split(env, 3)
if val[0] == "SP_NETWORK" {
cfg.Network = strings.Trim(val[1], " ")
}
}

cfg.ContainerID = string(cid)
cfg.ContainerName = info.Name
cfg.ContainerPID = strconv.Itoa(info.State.Pid)
cfg.Network = DefaultNetworkName
for _, env := range info.Config.Env {
val := regexp.MustCompile("=").Split(env, 3)
if val[0] == "SP_NETWORK" {
cfg.Network = strings.Trim(val[1], " ")
op = ConnectionAdd
case "DELETE":
var ok bool
if cfg, ok = d.Connections[cid]; !ok {
fmt.Println("Couldn't find the connection", cid)
postResp.ModifiedServerResponse.Code = 500
return
}

op = ConnectionDelete
}

context := &ConnectionContext{
ConnectionAdd,
op,
cfg,
make(chan *Connection),
}

d.cC <- context

<-context.Result

postResp := &adapterPostResponse{}
postResp.PowerstripProtocolVersion = reqParams.PowerstripProtocolVersion
postResp.ModifiedServerResponse.ContentType = "application/json"
postResp.ModifiedServerResponse.Body = reqParams.ServerResponse.Body
postResp.ModifiedServerResponse.Code = reqParams.ServerResponse.Code

return postResp
}

return nil
return
}

func psAdapter(d *Daemon, w http.ResponseWriter, r *http.Request) *apiError {
Expand Down

0 comments on commit 44af3d1

Please sign in to comment.