From b1fb5ace1ba41cdb064151e55e4925e06d35dbc9 Mon Sep 17 00:00:00 2001 From: Aaron Feng Date: Mon, 16 Jun 2014 21:38:15 -0400 Subject: [PATCH] don't create new instance if found via tag Docker-DCO-1.1-Signed-off-by: Aaron Feng aaron.feng@gmail.com (github: aaronfeng) --- backends/ec2.go | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/backends/ec2.go b/backends/ec2.go index 426b4b3f9f..e0acf57b97 100644 --- a/backends/ec2.go +++ b/backends/ec2.go @@ -21,9 +21,9 @@ type ec2Config struct { } type ec2Client struct { - config *ec2Config - ec2Conn *ec2.EC2 - Server *beam.Server + config *ec2Config + ec2Conn *ec2.EC2 + Server *beam.Server instance *ec2.Instance } @@ -36,12 +36,20 @@ func (c *ec2Client) get(ctx *beam.Message) error { func (c *ec2Client) start(ctx *beam.Message) error { 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 + } 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}) @@ -157,6 +165,17 @@ func awsInit(config *ec2Config) (ec2Conn *ec2.EC2, err error) { 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 { ec2Tags := []ec2.Tag{ec2.Tag{"Name", c.config.tag}} if _, err := c.ec2Conn.CreateTags([]string{c.instance.InstanceId}, ec2Tags); err != nil {