A Terraform open-source module to automate the creation of tags
, the Name
key and other attributes across resources in AWS, the Name
prefix is based on a customizable order passed by the prefix_order
variable with a default value of ["enviroemnt", "project_name", "region", "name", "attributes"]
and a configurable delimiter
variable with value of -
.
The module supports the following:
- Optionally limiting the
id
variable length to a specific number of chars by modifying theprefix_lenght_limit
variable, defaulted to 0 which means no limit. - Optionally configure the case letter of
tag_key_case
andtag_value_case
, defaults totitle
,lower
respectively. - A random string will be created using the
random
provider that will be used in case of creating a truncated id,prefix_legnth_limit
!=0. - Supporting a configurable
regex_substitute_chars
variable which will replace any non-alphanumeric chars passed toenviroment
,project_name
,region
and,name
, defaulted to"/[^(a-z)(A-Z)(0-9)$]/"
. - A validation mechanism to validate some input variables e.g.
tag_key_case
,tag_value_case
,region
- Optional
attributes
which will be added automatically totags
variable andid
module "label" {
source = "github.com/obytes/terraform-aws-tag.git?ref=v1.0.7"
environment = "dev"
project_name = "obytes"
region = "me-south-1"
delimiter = "+"
attributes = ["private"]
enabled = true
prefix_length_limit = 10
}
The above example will generate the below output that can be passed to another label
module to create a new id
that has the base values used on label_1
module
context = {
"additional_tags" = {}
"attributes" = [
"private",
]
"delimiter" = "+"
"enabled" = "true"
"environment" = "dev"
"prefix_length_limit" = 10
"prefix_order" = [
"environment",
"project_name",
"region",
"name",
]
"project_name" = "obytes"
"region" = "me-south-1"
"tag_key_case" = "title"
"tag_value_case" = "lower"
"tags" = {}
}
id = dev+n4rnkc
tags = {
"Attributes" = "private"
"Environment" = "dev"
"Name" = "dev+n4rnkc"
"Project_name" = "obytes"
"Region" = "mesouth1"
}
Check the example folder for more details scenarios.
Name | Version |
---|---|
terraform | >=0.13.0 |
random | 3.1.0 |
Name | Version |
---|---|
random | 3.1.0 |
No modules.
Name | Type |
---|---|
random_string.this | resource |
Name | Description | Type | Default | Required |
---|---|---|---|---|
additional_tags | Additional Tags, tags which can be accessed by module..tags_as_list not added to .. | map(string) |
{} |
no |
attributes | A list of attributes e.g. private , shared , cost_center |
list(string) |
null |
no |
company_name | The company name or client name, could be fullName or abbreviation such as ex |
string |
null |
no |
context | n/a | any |
{ |
no |
delimiter | Delimiter to be used between project_name , environment , region and, name .Defaults to - (hyphen). Set to "" to use no delimiter at all. |
string |
null |
no |
enabled | A boolean to enable or disable tagging/labeling module | string |
null |
no |
environment | Environment, the environment name such as 'stg', 'prd', 'dev' | string |
null |
no |
prefix_length_limit | The minimum number of chars required for the id/Name desired (minimum =7) Set it to 0 for unlimited number of chars, full_id |
number |
null |
no |
prefix_order | The order of the Name tag Defaults to, ["environment", "project_name", "region", "name"] at least one should be provided |
list(string) |
null |
no |
project_name | The project name or organization name, could be fullName or abbreviation such as ex |
string |
null |
no |
random_string | A Random string, that will be appended to id in case of using prefix_length_limit Using the default value which is null , the string will be created using the random terraform provider |
string |
null |
no |
regex_substitute_chars | a regex to replace empty chars in project_name , environment , region and, name defaults to "\[a-zA-Z0-9]\" , replacing any chars other than chars and digits |
string |
null |
no |
region | Environment name such as us-east-1, ap-west-1, eu-central-1 | string |
null |
no |
tag_key_case | The letter case of output tag keys Possible values are lower', upperand title<br>defaults to title<br> |
string |
null |
no |
tag_value_case | The letter case of output tag values Possible values are lower', upperand title<br>defaults to lower<br> |
string |
null |
no |
tags | Tags, Tags to be generated by this module which can be access by module..tags e.g. map('CostCenter', 'Production') | map(string) |
{} |
no |
Name | Description |
---|---|
additional_tags | Additional Tags, tags which can be accessed by module..tags_as_list not added to .. |
attributes | A list of attributes e.g. private , shared , cost_center |
company_name | The name of the company or client |
context | A context to be used as an input for other modules |
delimiter | Delimiter to be used between project_name , environment , region and, name . |
enabled | A boolean to enable or disable tagging/labeling module |
environment | Environment name passed to module such as us-east-1, ap-west-1, eu-central-1 |
id | ID, restricted to prefix_length_limit if set otherwise, full ID |
id_full | Full ID, not restricted to prefix_length_limit |
prefix_order | an ordered list of strings that forms the ID attribute |
project_name | The project name or organization name, could be fullName or abbreviation such as ex |
random_string | A random string, used in id and id_short in case of setting prefix_lenght_limit |
regex_substitute_chars | Regex, to be used for id substitution in case of using prefix_length_limit |
tags | Tags, Tags to be generated by this module which can be access by module..tags e.g. map('CostCenter', 'Production') |