From 4a6b5bb61f9f8893467cc9b426bffc1896aeb9bd Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Sat, 24 Mar 2018 18:26:01 -0400 Subject: [PATCH] Move routetable detection to new logic --- pkg/resources/aws/BUILD.bazel | 1 + pkg/resources/aws/aws.go | 56 --------------- pkg/resources/aws/routetable.go | 92 ++++++++++++++++++++++++ upup/pkg/kutil/convert_kubeup_cluster.go | 2 +- 4 files changed, 94 insertions(+), 57 deletions(-) create mode 100644 pkg/resources/aws/routetable.go diff --git a/pkg/resources/aws/BUILD.bazel b/pkg/resources/aws/BUILD.bazel index ab3e3345be..ef024a060a 100644 --- a/pkg/resources/aws/BUILD.bazel +++ b/pkg/resources/aws/BUILD.bazel @@ -6,6 +6,7 @@ go_library( "aws.go", "errors.go", "filters.go", + "routetable.go", "tags.go", "vpc.go", ], diff --git a/pkg/resources/aws/aws.go b/pkg/resources/aws/aws.go index 4ac9f3139a..7740d32966 100644 --- a/pkg/resources/aws/aws.go +++ b/pkg/resources/aws/aws.go @@ -943,62 +943,6 @@ func DescribeRouteTablesIgnoreTags(cloud fi.Cloud) ([]*ec2.RouteTable, error) { return response.RouteTables, nil } -// DescribeRouteTables lists route-tables tagged for the cloud -func DescribeRouteTables(cloud fi.Cloud) ([]*ec2.RouteTable, error) { - c := cloud.(awsup.AWSCloud) - - glog.V(2).Infof("Listing EC2 RouteTables") - request := &ec2.DescribeRouteTablesInput{ - Filters: BuildEC2Filters(cloud), - } - response, err := c.EC2().DescribeRouteTables(request) - if err != nil { - return nil, fmt.Errorf("error listing RouteTables: %v", err) - } - - return response.RouteTables, nil -} - -func ListRouteTables(cloud fi.Cloud, clusterName string) ([]*resources.Resource, error) { - routeTables, err := DescribeRouteTables(cloud) - if err != nil { - return nil, err - } - - var resourceTrackers []*resources.Resource - - for _, rt := range routeTables { - resourceTracker := buildTrackerForRouteTable(rt, clusterName) - resourceTrackers = append(resourceTrackers, resourceTracker) - } - - return resourceTrackers, nil -} - -func buildTrackerForRouteTable(rt *ec2.RouteTable, clusterName string) *resources.Resource { - resourceTracker := &resources.Resource{ - Name: FindName(rt.Tags), - ID: aws.StringValue(rt.RouteTableId), - Type: ec2.ResourceTypeRouteTable, - Deleter: DeleteRouteTable, - Shared: HasSharedTag(ec2.ResourceTypeRouteTable+":"+*rt.RouteTableId, rt.Tags, clusterName), - } - - var blocks []string - var blocked []string - - blocks = append(blocks, "vpc:"+aws.StringValue(rt.VpcId)) - - for _, a := range rt.Associations { - blocked = append(blocked, "subnet:"+aws.StringValue(a.SubnetId)) - } - - resourceTracker.Blocks = blocks - resourceTracker.Blocked = blocked - - return resourceTracker -} - func DeleteDhcpOptions(cloud fi.Cloud, r *resources.Resource) error { c := cloud.(awsup.AWSCloud) diff --git a/pkg/resources/aws/routetable.go b/pkg/resources/aws/routetable.go new file mode 100644 index 0000000000..553a89c39f --- /dev/null +++ b/pkg/resources/aws/routetable.go @@ -0,0 +1,92 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package aws + +import ( + "fmt" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/golang/glog" + + "k8s.io/kops/pkg/resources" + "k8s.io/kops/upup/pkg/fi" + "k8s.io/kops/upup/pkg/fi/cloudup/awsup" +) + +// DescribeRouteTables lists route-tables tagged for the cluster (shared and owned) +func DescribeRouteTables(cloud fi.Cloud, clusterName string) (map[string]*ec2.RouteTable, error) { + c := cloud.(awsup.AWSCloud) + + routeTables := make(map[string]*ec2.RouteTable) + glog.V(2).Infof("Listing EC2 RouteTables") + for _, filters := range buildEC2FiltersForCluster(clusterName) { + request := &ec2.DescribeRouteTablesInput{ + Filters: filters, + } + response, err := c.EC2().DescribeRouteTables(request) + if err != nil { + return nil, fmt.Errorf("error listing RouteTables: %v", err) + } + + for _, rt := range response.RouteTables { + routeTables[aws.StringValue(rt.RouteTableId)] = rt + } + } + + return routeTables, nil +} + +func ListRouteTables(cloud fi.Cloud, clusterName string) ([]*resources.Resource, error) { + routeTables, err := DescribeRouteTables(cloud, clusterName) + if err != nil { + return nil, err + } + + var resourceTrackers []*resources.Resource + + for _, rt := range routeTables { + resourceTracker := buildTrackerForRouteTable(rt, clusterName) + resourceTrackers = append(resourceTrackers, resourceTracker) + } + + return resourceTrackers, nil +} + +func buildTrackerForRouteTable(rt *ec2.RouteTable, clusterName string) *resources.Resource { + resourceTracker := &resources.Resource{ + Name: FindName(rt.Tags), + ID: aws.StringValue(rt.RouteTableId), + Type: ec2.ResourceTypeRouteTable, + Deleter: DeleteRouteTable, + Shared: !HasOwnedTag(ec2.ResourceTypeRouteTable+":"+*rt.RouteTableId, rt.Tags, clusterName), + } + + var blocks []string + var blocked []string + + blocks = append(blocks, "vpc:"+aws.StringValue(rt.VpcId)) + + for _, a := range rt.Associations { + blocked = append(blocked, "subnet:"+aws.StringValue(a.SubnetId)) + } + + resourceTracker.Blocks = blocks + resourceTracker.Blocked = blocked + + return resourceTracker +} diff --git a/upup/pkg/kutil/convert_kubeup_cluster.go b/upup/pkg/kutil/convert_kubeup_cluster.go index 103a477726..f8b702a9ff 100644 --- a/upup/pkg/kutil/convert_kubeup_cluster.go +++ b/upup/pkg/kutil/convert_kubeup_cluster.go @@ -138,7 +138,7 @@ func (x *ConvertKubeupCluster) Upgrade() error { return err } - routeTables, err := awsresources.DescribeRouteTables(x.Cloud) + routeTables, err := awsresources.DescribeRouteTables(x.Cloud, oldClusterName) if err != nil { return err }