Files
Packer-Cn/packer/plugin/command.go
T

48 lines
805 B
Go
Raw Normal View History

2013-05-04 21:26:30 -07:00
package plugin
import (
"bytes"
"github.com/mitchellh/packer/packer"
"net/rpc"
"os/exec"
packrpc "github.com/mitchellh/packer/packer/rpc"
"strings"
"time"
)
2013-05-07 14:05:51 -07:00
func Command(cmd *exec.Cmd) (result packer.Command, err error) {
2013-05-07 11:50:42 -07:00
env := []string{
"PACKER_PLUGIN_MIN_PORT=10000",
"PACKER_PLUGIN_MAX_PORT=25000",
}
2013-05-04 21:26:30 -07:00
out := new(bytes.Buffer)
2013-05-07 11:50:42 -07:00
cmd.Env = append(cmd.Env, env...)
cmd.Stdout = out
2013-05-07 14:05:51 -07:00
err = cmd.Start()
if err != nil {
return
}
2013-05-04 21:26:30 -07:00
// TODO: timeout
// TODO: check that command is even running
address := ""
for {
line, err := out.ReadBytes('\n')
if err == nil {
address = strings.TrimSpace(string(line))
break
}
time.Sleep(10 * time.Millisecond)
}
client, err := rpc.Dial("tcp", address)
if err != nil {
panic(err)
}
2013-05-04 21:26:30 -07:00
2013-05-07 14:05:51 -07:00
result = packrpc.Command(client)
return
2013-05-04 21:26:30 -07:00
}