LoadBalancer names cannot be longer then 32 characters..

Longer names will fail with:

 AmazonElasticLoadBalancingV2; Status Code: 400; Error Code: ValidationError;

 Fairly straight forward approach, truncate at 32 characters.
 Considering that we append "LoadBalancer" to every name and it is 12
 characters the name should stay useful. We can decide later if "LB" is
 better then a truncated "LoadBalan".

 The golden test data needed to be updated because its names were also
 over 32 characters.

 Fixes #160.

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Chad Metcalf 2020-07-14 22:50:40 -07:00 committed by Nicolas De Loof
parent 8ab544a770
commit b2a9019700
No known key found for this signature in database
GPG Key ID: 9858809D6F8F6E7E
3 changed files with 16 additions and 13 deletions

View File

@ -218,7 +218,9 @@ func getLoadBalancerSecurityGroups(project *types.Project, template *cloudformat
}
func createLoadBalancer(project *types.Project, template *cloudformation.Template) string {
loadBalancerName := fmt.Sprintf("%sLoadBalancer", strings.Title(project.Name))
// load balancer names are limited to 32 characters total
loadBalancerName := fmt.Sprintf("%.32s", fmt.Sprintf("%sLoadBalancer", strings.Title(project.Name)))
// Create LoadBalancer if `ParameterLoadBalancerName` is not set
template.Conditions["CreateLoadBalancer"] = cloudformation.Equals("", cloudformation.Ref(ParameterLoadBalancerARN))

View File

@ -34,7 +34,7 @@ func TestSimpleWithOverrides(t *testing.T) {
}
func TestRolePolicy(t *testing.T) {
template := convertYaml(t, `
template := convertYaml(t, "test", `
version: "3"
services:
foo:
@ -54,14 +54,14 @@ services:
}
func TestMapNetworksToSecurityGroups(t *testing.T) {
template := convertYaml(t, `
template := convertYaml(t, "test", `
version: "3"
services:
test:
image: hello_world
networks:
- front-tier
- back-tier
- front-tier
- back-tier
networks:
front-tier:
@ -79,7 +79,7 @@ networks:
}
func TestLoadBalancerTypeApplication(t *testing.T) {
template := convertYaml(t, `
template := convertYaml(t, "test123456789009876543211234567890", `
version: "3"
services:
test:
@ -89,12 +89,13 @@ services:
`)
lb := template.Resources["TestLoadBalancer"].(*elasticloadbalancingv2.LoadBalancer)
assert.Check(t, lb != nil)
assert.Check(t, len(lb.Name) <= 32)
assert.Check(t, lb.Type == elbv2.LoadBalancerTypeEnumApplication)
assert.Check(t, len(lb.SecurityGroups) > 0)
}
func TestServiceReplicas(t *testing.T) {
template := convertYaml(t, `
template := convertYaml(t, "test", `
version: "3"
services:
test:
@ -108,7 +109,7 @@ services:
}
func TestLoadBalancerTypeNetwork(t *testing.T) {
template := convertYaml(t, `
template := convertYaml(t, "test", `
version: "3"
services:
test:
@ -123,7 +124,7 @@ services:
}
func TestServiceMapping(t *testing.T) {
template := convertYaml(t, `
template := convertYaml(t, "test", `
version: "3"
services:
test:
@ -163,7 +164,7 @@ func get(l []ecs.TaskDefinition_KeyValuePair, name string) string {
}
func TestResourcesHaveProjectTagSet(t *testing.T) {
template := convertYaml(t, `
template := convertYaml(t, "test", `
version: "3"
services:
test:
@ -207,7 +208,7 @@ func load(t *testing.T, paths ...string) *types.Project {
return project
}
func convertYaml(t *testing.T, yaml string) *cloudformation.Template {
func convertYaml(t *testing.T, name string, yaml string) *cloudformation.Template {
dict, err := loader.ParseYAML([]byte(yaml))
assert.NilError(t, err)
model, err := loader.Load(types.ConfigDetails{

View File

@ -260,10 +260,10 @@
},
"Type": "AWS::EC2::SecurityGroupIngress"
},
"TestSimpleWithOverridesLoadBalancer": {
"TestSimpleWithOverridesLoadBalan": {
"Condition": "CreateLoadBalancer",
"Properties": {
"Name": "TestSimpleWithOverridesLoadBalancer",
"Name": "TestSimpleWithOverridesLoadBalan",
"Scheme": "internet-facing",
"SecurityGroups": [
{