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

Commit 20379ee

Browse files
committed
Reducing cyclomatic complexity
1 parent 1f86075 commit 20379ee

File tree

1 file changed

+50
-28
lines changed

1 file changed

+50
-28
lines changed

ecs/cloudformation.go

+50-28
Original file line numberDiff line numberDiff line change
@@ -151,34 +151,12 @@ func (b *ecsAPIService) createService(project *types.Project, service types.Serv
151151

152152
urls, hasURLExtension := port.Extensions[extensionURLs]
153153
if hasURLExtension {
154-
if resources.loadBalancerType != elbv2.LoadBalancerTypeEnumApplication {
155-
return fmt.Errorf("%s:%d has extension x-aws-loadbalancer_urls, so the loadbalancer must be of type 'application'", service.Name, port.Target)
156-
}
157-
158154
urlss := urls.(string)
159-
for i, url0 := range strings.Split(urlss, " ") {
160-
ruleOrder := serviceOrder*1000 + i
161-
redirOrder := serviceOrder*1000 + 100 + i
162-
httpcertArn := ""
163-
httpcert, ok := project.Extensions[extensionHTTPSCert]
164-
if ok {
165-
httpcertArn = httpcert.(string)
166-
}
167-
168-
//create listener and url rules if not created yet
169-
listenerName, additionalListenerName, err := b.createOrUpdateListenerURLRules(service, port, template, targetGroupName, resources.loadBalancer, url0, httpcertArn, ruleOrder, redirOrder)
170-
if err != nil {
171-
return err
172-
}
173-
if additionalListenerName != "" {
174-
if !elementExists(dependsOn, additionalListenerName) {
175-
dependsOn = append(dependsOn, additionalListenerName)
176-
}
177-
}
178-
if !elementExists(dependsOn, listenerName) {
179-
dependsOn = append(dependsOn, listenerName)
180-
}
155+
depends, err := b.createListenersForURLs(project, service, port, template, targetGroupName, resources, urlss, serviceOrder)
156+
if err != nil {
157+
return err
181158
}
159+
dependsOn = append(dependsOn, depends...)
182160

183161
} else {
184162
listenerName := b.createListener(service, port, template, targetGroupName, resources.loadBalancer, protocol)
@@ -365,7 +343,51 @@ func (b *ecsAPIService) createListener(service types.ServiceConfig, port types.S
365343
return listenerName
366344
}
367345

368-
func (b *ecsAPIService) createOrUpdateListenerURLRules(service types.ServiceConfig, port types.ServicePortConfig,
346+
func (b *ecsAPIService) createListenersForURLs(
347+
project *types.Project,
348+
service types.ServiceConfig,
349+
port types.ServicePortConfig,
350+
template *cloudformation.Template,
351+
targetGroupName string,
352+
resources awsResources,
353+
urls string,
354+
serviceOrder int) ([]string, error) {
355+
356+
if resources.loadBalancerType != elbv2.LoadBalancerTypeEnumApplication {
357+
return nil, fmt.Errorf("%s:%d has extension x-aws-loadbalancer_urls, so the loadbalancer must be of type 'application'", service.Name, port.Target)
358+
}
359+
360+
dependsOn := []string{}
361+
for i, url0 := range strings.Split(urls, " ") {
362+
ruleOrder := serviceOrder*1000 + i
363+
redirOrder := serviceOrder*1000 + 100 + i
364+
httpcertArn := ""
365+
httpcert, ok := project.Extensions[extensionHTTPSCert]
366+
if ok {
367+
httpcertArn = httpcert.(string)
368+
}
369+
370+
//create listener and url rules if not created yet
371+
listenerName, additionalListenerName, err := b.createOrUpdateListenerURLRules(service, port, template, targetGroupName, resources.loadBalancer, url0, httpcertArn, ruleOrder, redirOrder)
372+
if err != nil {
373+
return nil, err
374+
}
375+
if additionalListenerName != "" {
376+
if !elementExists(dependsOn, additionalListenerName) {
377+
dependsOn = append(dependsOn, additionalListenerName)
378+
}
379+
}
380+
if !elementExists(dependsOn, listenerName) {
381+
dependsOn = append(dependsOn, listenerName)
382+
}
383+
}
384+
385+
return dependsOn, nil
386+
}
387+
388+
func (b *ecsAPIService) createOrUpdateListenerURLRules(
389+
service types.ServiceConfig,
390+
port types.ServicePortConfig,
369391
template *cloudformation.Template,
370392
targetGroupName string,
371393
loadBalancer awsResource,
@@ -441,8 +463,8 @@ func (b *ecsAPIService) createOrUpdateListenerURLRules(service types.ServiceConf
441463
Certificates: certs,
442464
Port: int(port.Published),
443465
}
444-
template.Resources[listenerName] = listener
445466
}
467+
template.Resources[listenerName] = listener
446468

447469
//add forward rules for this url
448470
listenerRuleName := fmt.Sprintf(

0 commit comments

Comments
 (0)