zero icon indicating copy to clipboard operation
zero copied to clipboard

Validate project name during "zero apply"

Open aspcanada opened this issue 3 years ago • 2 comments

I received several errors during zero apply. It appears that the project name that I chose (0play) should be validated to not accept names that start with a numeral. It appears that some AWS resources do not like names starting with a numeric.

Originally, I thought the issue was the domain that I registered (0play-stage.click).

Error: invalid value for replication_group_id (must begin with a letter)

│
│   with module.stage.module.cache[0].module.redis[0].aws_elasticache_replication_group.default[0],
│   on .terraform/modules/stage.cache.redis/main.tf line 83, in resource "aws_elasticache_replication_group" "default":
│   83:   replication_group_id          = var.replication_group_id == "" ? module.this.id : var.replication_group_id

Error: invalid value for domain_name (must start with a lowercase alphabet and be at least 3 and no more than 28 characters long. Valid characters are a-z (lowercase letters), 0-9, and - (hyphen).)

│   with module.stage.module.logging[0].module.elasticsearch.aws_elasticsearch_domain.default[0],
│   on .terraform/modules/stage.logging.elasticsearch/main.tf line 102, in resource "aws_elasticsearch_domain" "default":
│  102:   domain_name           = module.this.id

Error: first character of "name_prefix" must be a letter

│   with module.stage.module.db[0].module.rds_postgres[0].module.db_option_group.aws_db_option_group.this[0],
│   on .terraform/modules/stage.db.rds_postgres/modules/db_option_group/main.tf line 4, in resource "aws_db_option_group" "this":
│    4:   name_prefix              = var.name_prefix

Error: first character of parameter group "name_prefix" must be a letter

│   with module.stage.module.db[0].module.rds_postgres[0].module.db_parameter_group.aws_db_parameter_group.this[0],
│   on .terraform/modules/stage.db.rds_postgres/modules/db_parameter_group/main.tf line 36, in resource "aws_db_parameter_group" "this":
│   36:   name_prefix = var.name_prefix
│
╵
make[1]: *** [apply-env] Error 1
make: *** [make-apply] Error 2
2022/01/19 14:18:20 Module Apply failed: Module (zero-aws-eks-stack)

aspcanada avatar Jan 19 '22 22:01 aspcanada

Seems like this would be an issue with the project name rather than the domain name. This is a pain since the project name is used pretty extensively as an identifier in resource naming. A reasonable fix for now would be to add validation on the project name field to enforce starting it with a letter. In the long run it's probably a good idea to find the individual spots with these restrictions and make sure we are enforcing the right name format.

This would require a small tweak to the ValidateProjectName function in this project since the project name is the very first thing we prompt for, and not in the module parameter definitions.

bmonkman avatar Jan 25 '22 22:01 bmonkman

Oh interesting... I didn't even think about the project name, I assumed it was an issue with my domain name choice. I'll update the summary and description.

aspcanada avatar Jan 26 '22 20:01 aspcanada