@@ -151,34 +151,12 @@ func (b *ecsAPIService) createService(project *types.Project, service types.Serv
151
151
152
152
urls , hasURLExtension := port .Extensions [extensionURLs ]
153
153
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
-
158
154
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
181
158
}
159
+ dependsOn = append (dependsOn , depends ... )
182
160
183
161
} else {
184
162
listenerName := b .createListener (service , port , template , targetGroupName , resources .loadBalancer , protocol )
@@ -365,7 +343,51 @@ func (b *ecsAPIService) createListener(service types.ServiceConfig, port types.S
365
343
return listenerName
366
344
}
367
345
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 ,
369
391
template * cloudformation.Template ,
370
392
targetGroupName string ,
371
393
loadBalancer awsResource ,
@@ -441,8 +463,8 @@ func (b *ecsAPIService) createOrUpdateListenerURLRules(service types.ServiceConf
441
463
Certificates : certs ,
442
464
Port : int (port .Published ),
443
465
}
444
- template .Resources [listenerName ] = listener
445
466
}
467
+ template .Resources [listenerName ] = listener
446
468
447
469
//add forward rules for this url
448
470
listenerRuleName := fmt .Sprintf (
0 commit comments