Merge pull request #193 from justinsb/fix_181

Discover an existing InternetGateway when running with Terraform Output
This commit is contained in:
Justin Santa Barbara 2016-07-22 12:49:41 -04:00 committed by GitHub
commit b9f06896ed
1 changed files with 39 additions and 8 deletions

View File

@ -24,6 +24,22 @@ func (e *InternetGateway) CompareWithID() *string {
return e.ID
}
func findInternetGateway(cloud *awsup.AWSCloud, request *ec2.DescribeInternetGatewaysInput) (*ec2.InternetGateway, error) {
response, err := cloud.EC2.DescribeInternetGateways(request)
if err != nil {
return nil, fmt.Errorf("error listing InternetGateways: %v", err)
}
if response == nil || len(response.InternetGateways) == 0 {
return nil, nil
}
if len(response.InternetGateways) != 1 {
return nil, fmt.Errorf("found multiple InternetGateways matching tags")
}
igw := response.InternetGateways[0]
return igw, nil
}
func (e *InternetGateway) Find(c *fi.Context) (*InternetGateway, error) {
cloud := c.Cloud.(*awsup.AWSCloud)
@ -44,18 +60,13 @@ func (e *InternetGateway) Find(c *fi.Context) (*InternetGateway, error) {
}
}
response, err := cloud.EC2.DescribeInternetGateways(request)
igw, err := findInternetGateway(cloud, request)
if err != nil {
return nil, fmt.Errorf("error listing InternetGateways: %v", err)
return nil, err
}
if response == nil || len(response.InternetGateways) == 0 {
if igw == nil {
return nil, nil
}
if len(response.InternetGateways) != 1 {
return nil, fmt.Errorf("found multiple InternetGateways matching tags")
}
igw := response.InternetGateways[0]
actual := &InternetGateway{
ID: igw.InternetGatewayId,
Name: findNameTag(igw.Tags),
@ -146,6 +157,26 @@ func (_ *InternetGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, ch
shared := fi.BoolValue(e.Shared)
if shared {
// Not terraform owned / managed
// But ... attempt to discover the ID so TerraformLink works
if e.ID == nil {
request := &ec2.DescribeInternetGatewaysInput{}
vpcID := fi.StringValue(e.VPC.ID)
if vpcID == "" {
return fmt.Errorf("VPC ID is required when InternetGateway is shared")
}
request.Filters = []*ec2.Filter{awsup.NewEC2Filter("attachment.vpc-id", vpcID)}
igw, err := findInternetGateway(t.Cloud.(*awsup.AWSCloud), request)
if err != nil {
return err
}
if igw == nil {
glog.Warningf("Cannot find internet gateway for VPC %q", vpcID)
} else {
e.ID = igw.InternetGatewayId
}
}
return nil
}