func findMainRouteTable(ec2conn *ec2.EC2, vpcId string) (*ec2.RouteTable, error) { mainFilter := ec2.Filter{ aws.String("association.main"), []string{"true"}, } vpcFilter := ec2.Filter{ aws.String("vpc-id"), []string{vpcId}, } routeResp, err := ec2conn.DescribeRouteTables(&ec2.DescribeRouteTablesRequest{ Filters: []ec2.Filter{mainFilter, vpcFilter}, }) if err != nil { return nil, err } else if len(routeResp.RouteTables) != 1 { return nil, fmt.Errorf( "Expected to find a single main routing table for VPC: %s, but found %d", vpcId, len(routeResp.RouteTables)) } return &routeResp.RouteTables[0], nil }
// resourceAwsRouteTableStateRefreshFunc returns a resource.StateRefreshFunc that is used to watch // a RouteTable. func resourceAwsRouteTableStateRefreshFunc(conn *ec2.EC2, id string) resource.StateRefreshFunc { return func() (interface{}, string, error) { resp, err := conn.DescribeRouteTables(&ec2.DescribeRouteTablesRequest{ RouteTableIDs: []string{id}, }) if err != nil { if ec2err, ok := err.(aws.APIError); ok && ec2err.Code == "InvalidRouteTableID.NotFound" { resp = nil } else { log.Printf("Error on RouteTableStateRefresh: %s", err) return nil, "", err } } if resp == nil { // Sometimes AWS just has consistency issues and doesn't see // our instance yet. Return an empty state. return nil, "", nil } rt := &resp.RouteTables[0] return rt, "ready", nil } }