mirror of https://github.com/kubernetes/kops.git
Merge pull request #193 from justinsb/fix_181
Discover an existing InternetGateway when running with Terraform Output
This commit is contained in:
commit
b9f06896ed
|
|
@ -24,6 +24,22 @@ func (e *InternetGateway) CompareWithID() *string {
|
||||||
return e.ID
|
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) {
|
func (e *InternetGateway) Find(c *fi.Context) (*InternetGateway, error) {
|
||||||
cloud := c.Cloud.(*awsup.AWSCloud)
|
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 {
|
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
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(response.InternetGateways) != 1 {
|
|
||||||
return nil, fmt.Errorf("found multiple InternetGateways matching tags")
|
|
||||||
}
|
|
||||||
igw := response.InternetGateways[0]
|
|
||||||
actual := &InternetGateway{
|
actual := &InternetGateway{
|
||||||
ID: igw.InternetGatewayId,
|
ID: igw.InternetGatewayId,
|
||||||
Name: findNameTag(igw.Tags),
|
Name: findNameTag(igw.Tags),
|
||||||
|
|
@ -146,6 +157,26 @@ func (_ *InternetGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, ch
|
||||||
shared := fi.BoolValue(e.Shared)
|
shared := fi.BoolValue(e.Shared)
|
||||||
if shared {
|
if shared {
|
||||||
// Not terraform owned / managed
|
// 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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue