basic ec2 config

Docker-DCO-1.1-Signed-off-by: Aaron Feng <aaron.feng@gmail.com> (github: aaronfeng)
This commit is contained in:
Aaron Feng 2014-06-14 11:07:04 -07:00
parent cfb7f6188b
commit 3b2f87aa77
1 changed files with 56 additions and 2 deletions

View File

@ -3,10 +3,24 @@ package backends
import ( import (
"time" "time"
"fmt" "fmt"
"strings"
"github.com/docker/libswarm/beam" "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 { type ec2Client struct {
config *ec2Config
Server *beam.Server Server *beam.Server
} }
@ -64,12 +78,52 @@ func (c *ec2Client) attach(ctx *beam.Message) error {
return nil 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 { func Ec2() beam.Sender {
backend := beam.NewServer() backend := beam.NewServer()
backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error { backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error {
fmt.Println("*** init ***") 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.OnSpawn(beam.Handler(client.spawn))
client.Server.OnStart(beam.Handler(client.start)) client.Server.OnStart(beam.Handler(client.start))
client.Server.OnStop(beam.Handler(client.stop)) client.Server.OnStop(beam.Handler(client.stop))
@ -78,7 +132,7 @@ func Ec2() beam.Sender {
client.Server.OnError(beam.Handler(client.error)) client.Server.OnError(beam.Handler(client.error))
client.Server.OnLs(beam.Handler(client.ls)) client.Server.OnLs(beam.Handler(client.ls))
client.Server.OnGet(beam.Handler(client.get)) 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 err
})) }))
return backend return backend