don't create new instance if found via tag

Docker-DCO-1.1-Signed-off-by: Aaron Feng aaron.feng@gmail.com (github: aaronfeng)
This commit is contained in:
Aaron Feng 2014-06-16 21:38:15 -04:00
parent d42f8ec8e1
commit b1fb5ace1b
1 changed files with 26 additions and 7 deletions

View File

@ -21,9 +21,9 @@ type ec2Config struct {
} }
type ec2Client struct { type ec2Client struct {
config *ec2Config config *ec2Config
ec2Conn *ec2.EC2 ec2Conn *ec2.EC2
Server *beam.Server Server *beam.Server
instance *ec2.Instance instance *ec2.Instance
} }
@ -36,12 +36,20 @@ func (c *ec2Client) get(ctx *beam.Message) error {
func (c *ec2Client) start(ctx *beam.Message) error { func (c *ec2Client) start(ctx *beam.Message) error {
fmt.Println("*** ec2 OnStart ***") fmt.Println("*** ec2 OnStart ***")
if err := c.startInstance(); err != nil {
return err
}
if err := c.tagtInstance(); err != nil { if instance, err := c.findInstance(); err != nil {
return err return err
} else if instance != nil {
fmt.Println("*** found existing instance ****")
c.instance = instance
} else {
if err := c.startInstance(); err != nil {
return err
}
if err := c.tagtInstance(); err != nil {
return err
}
} }
ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: c.Server}) ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: c.Server})
@ -157,6 +165,17 @@ func awsInit(config *ec2Config) (ec2Conn *ec2.EC2, err error) {
return ec2.New(auth, config.region), nil return ec2.New(auth, config.region), nil
} }
func (c *ec2Client) findInstance() (instance *ec2.Instance, err error) {
filter := ec2.NewFilter()
filter.Add("tag:Name", c.config.tag)
if resp, err := c.ec2Conn.Instances([]string{}, filter); err != nil {
return nil, err
} else {
return &resp.Reservations[0].Instances[0], nil
}
}
func (c *ec2Client) tagtInstance() error { func (c *ec2Client) tagtInstance() error {
ec2Tags := []ec2.Tag{ec2.Tag{"Name", c.config.tag}} ec2Tags := []ec2.Tag{ec2.Tag{"Name", c.config.tag}}
if _, err := c.ec2Conn.CreateTags([]string{c.instance.InstanceId}, ec2Tags); err != nil { if _, err := c.ec2Conn.CreateTags([]string{c.instance.InstanceId}, ec2Tags); err != nil {