Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit f2493af

Browse files
committed
classify vpc subnets
Signed-off-by: Pascal Euhus <[email protected]>
1 parent a19e9b2 commit f2493af

File tree

5 files changed

+37
-23
lines changed

5 files changed

+37
-23
lines changed

ecs/aws.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ type API interface {
6969
getURLWithPortMapping(ctx context.Context, targetGroupArns []string) ([]compose.PortPublisher, error)
7070
ListTasks(ctx context.Context, cluster string, family string) ([]string, error)
7171
GetPublicIPs(ctx context.Context, interfaces ...string) (map[string]string, error)
72-
ResolveLoadBalancer(ctx context.Context, nameOrArn string) (awsResource, string, string, []awsResource, error)
72+
ResolveLoadBalancer(ctx context.Context, nameOrArn string) (awsResource, string, string, vpcSubNets, error)
7373
GetLoadBalancerURL(ctx context.Context, arn string) (string, error)
7474
GetParameter(ctx context.Context, name string) (string, error)
7575
SecurityGroupExists(ctx context.Context, sg string) (bool, error)

ecs/awsResources.go

+15-11
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,16 @@ import (
3737
"github.com/sirupsen/logrus"
3838
)
3939

40+
// vpcSubNets classification
41+
type vpcSubNets struct {
42+
public []awsResource
43+
private []awsResource
44+
}
45+
4046
// awsResources hold the AWS component being used or created to support services definition
4147
type awsResources struct {
4248
vpc string // shouldn't this also be an awsResource ?
43-
subnets []awsResource
49+
subnets vpcSubNets
4450
cluster awsResource
4551
loadBalancer awsResource
4652
loadBalancerType string
@@ -66,7 +72,7 @@ func (r *awsResources) allSecurityGroups() []string {
6672

6773
func (r *awsResources) subnetsIDs() []string {
6874
var ids []string
69-
for _, r := range r.subnets {
75+
for _, r := range append(r.subnets.private, r.subnets.public...) {
7076
ids = append(ids, r.ID())
7177
}
7278
return ids
@@ -207,13 +213,16 @@ func (b *ecsAPIService) parseVPCExtension(ctx context.Context, project *types.Pr
207213
}
208214

209215
var publicSubNets []awsResource
216+
var privateSubNets []awsResource
210217
for _, subNet := range subNets {
211218
isPublic, err := b.aws.IsPublicSubnet(ctx, subNet.ID())
212219
if err != nil {
213220
return err
214221
}
215222
if isPublic {
216223
publicSubNets = append(publicSubNets, subNet)
224+
} else {
225+
privateSubNets = append(privateSubNets, subNet)
217226
}
218227
}
219228

@@ -222,7 +231,8 @@ func (b *ecsAPIService) parseVPCExtension(ctx context.Context, project *types.Pr
222231
}
223232

224233
r.vpc = vpc
225-
r.subnets = subNets
234+
r.subnets.public = publicSubNets
235+
r.subnets.private = privateSubNets
226236
return nil
227237
}
228238

@@ -451,14 +461,8 @@ func (b *ecsAPIService) ensureLoadBalancer(r *awsResources, project *types.Proje
451461
}
452462

453463
var publicSubNetIDs []string
454-
for _, subNetID := range r.subnetsIDs() {
455-
isPublic, err := b.aws.IsPublicSubnet(context.Background(), subNetID)
456-
if err != nil {
457-
return err
458-
}
459-
if isPublic {
460-
publicSubNetIDs = append(publicSubNetIDs, subNetID)
461-
}
464+
for _, subNetID := range r.subnetsIDs() {
465+
publicSubNetIDs = append(publicSubNetIDs, subNetID)
462466
}
463467

464468
template.Resources["LoadBalancer"] = &elasticloadbalancingv2.LoadBalancer{

ecs/aws_mock.go

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ecs/sdk.go

+17-7
Original file line numberDiff line numberDiff line change
@@ -1045,7 +1045,7 @@ func (s sdk) GetPublicIPs(ctx context.Context, interfaces ...string) (map[string
10451045
}
10461046
}
10471047

1048-
func (s sdk) ResolveLoadBalancer(ctx context.Context, nameOrArn string) (awsResource, string, string, []awsResource, error) {
1048+
func (s sdk) ResolveLoadBalancer(ctx context.Context, nameOrArn string) (awsResource, string, string, vpcSubNets, error) {
10491049
logrus.Debug("Check if LoadBalancer exists: ", nameOrArn)
10501050
var arns []*string
10511051
var names []*string
@@ -1060,17 +1060,27 @@ func (s sdk) ResolveLoadBalancer(ctx context.Context, nameOrArn string) (awsReso
10601060
Names: names,
10611061
})
10621062
if err != nil {
1063-
return nil, "", "", nil, err
1063+
return nil, "", "", vpcSubNets{}, err
10641064
}
10651065
if len(lbs.LoadBalancers) == 0 {
1066-
return nil, "", "", nil, errors.Wrapf(errdefs.ErrNotFound, "load balancer %q does not exist", nameOrArn)
1066+
return nil, "", "", vpcSubNets{}, errors.Wrapf(errdefs.ErrNotFound, "load balancer %q does not exist", nameOrArn)
10671067
}
10681068
it := lbs.LoadBalancers[0]
1069-
var subNets []awsResource
1069+
var subNets vpcSubNets
10701070
for _, az := range it.AvailabilityZones {
1071-
subNets = append(subNets, existingAWSResource{
1072-
id: aws.StringValue(az.SubnetId),
1073-
})
1071+
isPublic, err := s.IsPublicSubnet(ctx,aws.StringValue(az.SubnetId));
1072+
if err != nil {
1073+
return nil, "", "", subNets, err
1074+
}
1075+
if isPublic {
1076+
subNets.public = append(subNets.public, existingAWSResource{
1077+
id: aws.StringValue(az.SubnetId),
1078+
})
1079+
} else {
1080+
subNets.private = append(subNets.private, existingAWSResource{
1081+
id: aws.StringValue(az.SubnetId),
1082+
})
1083+
}
10741084
}
10751085
return existingAWSResource{
10761086
arn: aws.StringValue(it.LoadBalancerArn),

ecs/volumes.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import (
3232

3333
func (b *ecsAPIService) createNFSMountTarget(project *types.Project, resources awsResources, template *cloudformation.Template) {
3434
for volume := range project.Volumes {
35-
for _, subnet := range resources.subnets {
35+
for _, subnet := range append(resources.subnets.public, resources.subnets.private...) {
3636
name := fmt.Sprintf("%sNFSMountTargetOn%s", normalizeResourceName(volume), normalizeResourceName(subnet.ID()))
3737
template.Resources[name] = &efs.MountTarget{
3838
FileSystemId: resources.filesystems[volume].ID(),
@@ -45,7 +45,7 @@ func (b *ecsAPIService) createNFSMountTarget(project *types.Project, resources a
4545

4646
func (b *ecsAPIService) mountTargets(volume string, resources awsResources) []string {
4747
var refs []string
48-
for _, subnet := range resources.subnets {
48+
for _, subnet := range append(resources.subnets.public, resources.subnets.private...) {
4949
refs = append(refs, fmt.Sprintf("%sNFSMountTargetOn%s", normalizeResourceName(volume), normalizeResourceName(subnet.ID())))
5050
}
5151
return refs

0 commit comments

Comments
 (0)