diff --git a/backends/ec2.go b/backends/ec2.go index d2e5433d50..06e874951c 100644 --- a/backends/ec2.go +++ b/backends/ec2.go @@ -3,10 +3,24 @@ package backends import ( "time" "fmt" + "strings" "github.com/docker/libswarm/beam" ) +type ec2Config struct { + access_key string + secret_key string + security_group string + instance_type string + keypair string + region string + zone string + ami string + tag string +} + type ec2Client struct { + config *ec2Config Server *beam.Server } @@ -64,12 +78,52 @@ func (c *ec2Client) attach(ctx *beam.Message) error { return nil } +func newConfig(args []string) (config *ec2Config, err error) { + // TODO (aaron): fail fast on incorrect number of args + + var optValPair []string + var opt, val string + + config = new(ec2Config) + for _, value := range args { + optValPair = strings.Split(value, "=") + opt = optValPair[0] + val = optValPair[1] + + switch opt { + case "--region": + config.region = val + case "--zone": + config.zone = val + case "--tag": + config.tag = val + case "--ami": + config.ami = val + case "--keypair": + config.keypair = val + case "--security_group": + config.security_group = val + case "--instance_type": + config.instance_type = val + default: + fmt.Printf("Unrecognizable option: %s value: %s", opt, val) + } + } + return config, nil +} func Ec2() beam.Sender { backend := beam.NewServer() backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error { fmt.Println("*** init ***") - client := &ec2Client{beam.NewServer()} + + var config, err = newConfig(ctx.Args) + + if (err != nil) { + return err + } + + client := &ec2Client{config, beam.NewServer()} client.Server.OnSpawn(beam.Handler(client.spawn)) client.Server.OnStart(beam.Handler(client.start)) client.Server.OnStop(beam.Handler(client.stop)) @@ -78,7 +132,7 @@ func Ec2() beam.Sender { client.Server.OnError(beam.Handler(client.error)) client.Server.OnLs(beam.Handler(client.ls)) client.Server.OnGet(beam.Handler(client.get)) - _, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: client.Server}) + _, err = ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: client.Server}) return err })) return backend