-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: switch to CP null-label and refactoring (#22)
- Loading branch information
Showing
9 changed files
with
405 additions
and
194 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
name: 'Validate TF manifests' | ||
on: | ||
pull_request_target: | ||
pull_request: | ||
|
||
jobs: | ||
terraform: | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,29 @@ | ||
# Compiled files | ||
# Local .terraform directories | ||
**/.terraform/* | ||
|
||
# .tfstate files | ||
*.tfstate | ||
*.tfstate.backup | ||
*.tfstate.* | ||
|
||
# Crash log files | ||
crash.log | ||
|
||
# Ignore any .tfvars files that are generated automatically for each Terraform run. Most | ||
# .tfvars files are managed as part of configuration and so should be included in | ||
# version control. | ||
# | ||
# example.tfvars | ||
|
||
# Ignore override files as they are usually used to override resources locally and so | ||
# are not checked in | ||
override.tf | ||
override.tf.json | ||
*_override.tf | ||
*_override.tf.json | ||
|
||
# Include override files you do wish to add to version control using negated pattern | ||
# | ||
# !example_override.tf | ||
|
||
# Module directory | ||
.terraform/ | ||
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan | ||
# example: *tfplan* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
# | ||
# ONLY EDIT THIS FILE IN github.com/cloudposse/terraform-null-label | ||
# All other instances of this file should be a copy of that one | ||
# | ||
# | ||
# Copy this file from https://github.com/cloudposse/terraform-null-label/blob/master/exports/context.tf | ||
# and then place it in your Terraform module to automatically get | ||
# Cloud Posse's standard configuration inputs suitable for passing | ||
# to Cloud Posse modules. | ||
# | ||
# Modules should access the whole context as `module.this.context` | ||
# to get the input variables with nulls for defaults, | ||
# for example `context = module.this.context`, | ||
# and access individual variables as `module.this.<var>`, | ||
# with final values filled in. | ||
# | ||
# For example, when using defaults, `module.this.context.delimiter` | ||
# will be null, and `module.this.delimiter` will be `-` (hyphen). | ||
# | ||
|
||
module "this" { | ||
source = "cloudposse/label/null" | ||
version = "0.24.1" # requires Terraform >= 0.13.0 | ||
|
||
enabled = var.enabled | ||
namespace = var.namespace | ||
environment = var.environment | ||
stage = var.stage | ||
name = var.name | ||
delimiter = var.delimiter | ||
attributes = var.attributes | ||
tags = var.tags | ||
additional_tag_map = var.additional_tag_map | ||
label_order = var.label_order | ||
regex_replace_chars = var.regex_replace_chars | ||
id_length_limit = var.id_length_limit | ||
label_key_case = var.label_key_case | ||
label_value_case = var.label_value_case | ||
|
||
context = var.context | ||
} | ||
|
||
# Copy contents of cloudposse/terraform-null-label/variables.tf here | ||
|
||
variable "context" { | ||
type = any | ||
default = { | ||
enabled = true | ||
namespace = null | ||
environment = null | ||
stage = null | ||
name = null | ||
delimiter = null | ||
attributes = [] | ||
tags = {} | ||
additional_tag_map = {} | ||
regex_replace_chars = null | ||
label_order = [] | ||
id_length_limit = null | ||
label_key_case = null | ||
label_value_case = null | ||
} | ||
description = <<-EOT | ||
Single object for setting entire context at once. | ||
See description of individual variables for details. | ||
Leave string and numeric variables as `null` to use default value. | ||
Individual variable settings (non-null) override settings in context object, | ||
except for attributes, tags, and additional_tag_map, which are merged. | ||
EOT | ||
|
||
validation { | ||
condition = lookup(var.context, "label_key_case", null) == null ? true : contains(["lower", "title", "upper"], var.context["label_key_case"]) | ||
error_message = "Allowed values: `lower`, `title`, `upper`." | ||
} | ||
|
||
validation { | ||
condition = lookup(var.context, "label_value_case", null) == null ? true : contains(["lower", "title", "upper", "none"], var.context["label_value_case"]) | ||
error_message = "Allowed values: `lower`, `title`, `upper`, `none`." | ||
} | ||
} | ||
|
||
variable "enabled" { | ||
type = bool | ||
default = null | ||
description = "Set to false to prevent the module from creating any resources" | ||
} | ||
|
||
variable "namespace" { | ||
type = string | ||
default = null | ||
description = "Namespace, which could be your organization name or abbreviation, e.g. 'eg' or 'cp'" | ||
} | ||
|
||
variable "environment" { | ||
type = string | ||
default = null | ||
description = "Environment, e.g. 'uw2', 'us-west-2', OR 'prod', 'staging', 'dev', 'UAT'" | ||
} | ||
|
||
variable "stage" { | ||
type = string | ||
default = null | ||
description = "Stage, e.g. 'prod', 'staging', 'dev', OR 'source', 'build', 'test', 'deploy', 'release'" | ||
} | ||
|
||
variable "name" { | ||
type = string | ||
default = null | ||
description = "Solution name, e.g. 'app' or 'jenkins'" | ||
} | ||
|
||
variable "delimiter" { | ||
type = string | ||
default = "-" | ||
description = <<-EOT | ||
Delimiter to be used between `namespace`, `environment`, `stage`, `name` and `attributes`. | ||
Defaults to `-` (hyphen). Set to `""` to use no delimiter at all. | ||
EOT | ||
} | ||
|
||
variable "attributes" { | ||
type = list(string) | ||
default = [] | ||
description = "Additional attributes (e.g. `1`)" | ||
} | ||
|
||
variable "tags" { | ||
type = map(string) | ||
default = {} | ||
description = "Additional tags (e.g. `map('BusinessUnit','XYZ')`" | ||
} | ||
|
||
variable "additional_tag_map" { | ||
type = map(string) | ||
default = {} | ||
description = "Additional tags for appending to tags_as_list_of_maps. Not added to `tags`." | ||
} | ||
|
||
variable "label_order" { | ||
type = list(string) | ||
default = null | ||
description = <<-EOT | ||
The naming order of the id output and Name tag. | ||
Defaults to ["namespace", "environment", "stage", "name", "attributes"]. | ||
You can omit any of the 5 elements, but at least one must be present. | ||
EOT | ||
} | ||
|
||
variable "regex_replace_chars" { | ||
type = string | ||
default = null | ||
description = <<-EOT | ||
Regex to replace chars with empty string in `namespace`, `environment`, `stage` and `name`. | ||
If not set, `"/[^a-zA-Z0-9-]/"` is used to remove all characters other than hyphens, letters and digits. | ||
EOT | ||
} | ||
|
||
variable "id_length_limit" { | ||
type = number | ||
default = null | ||
description = <<-EOT | ||
Limit `id` to this many characters (minimum 6). | ||
Set to `0` for unlimited length. | ||
Set to `null` for default, which is `0`. | ||
Does not affect `id_full`. | ||
EOT | ||
validation { | ||
condition = var.id_length_limit == null ? true : var.id_length_limit >= 6 || var.id_length_limit == 0 | ||
error_message = "The id_length_limit must be >= 6 if supplied (not null), or 0 for unlimited length." | ||
} | ||
} | ||
|
||
variable "label_key_case" { | ||
type = string | ||
default = "lower" | ||
description = <<-EOT | ||
The letter case of label keys (`tag` names) (i.e. `name`, `namespace`, `environment`, `stage`, `attributes`) to use in `tags`. | ||
Possible values: `lower`, `title`, `upper`. | ||
Default value: `title`. | ||
EOT | ||
|
||
validation { | ||
condition = var.label_key_case == null ? true : contains(["lower", "title", "upper"], var.label_key_case) | ||
error_message = "Allowed values: `lower`, `title`, `upper`." | ||
} | ||
} | ||
|
||
variable "label_value_case" { | ||
type = string | ||
default = null | ||
description = <<-EOT | ||
The letter case of output label values (also used in `tags` and `id`). | ||
Possible values: `lower`, `title`, `upper` and `none` (no transformation). | ||
Default value: `lower`. | ||
EOT | ||
|
||
validation { | ||
condition = var.label_value_case == null ? true : contains(["lower", "title", "upper", "none"], var.label_value_case) | ||
error_message = "Allowed values: `lower`, `title`, `upper`, `none`." | ||
} | ||
} | ||
#### End of copy of cloudposse/terraform-null-label/variables.tf |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
<!--- BEGIN_TF_DOCS ---> | ||
## Requirements | ||
|
||
| Name | Version | | ||
|------|---------| | ||
| terraform | >= 0.14 | | ||
| google | >= 3.0 | | ||
|
||
## Providers | ||
|
||
No provider. | ||
|
||
## Inputs | ||
|
||
No input. | ||
|
||
## Outputs | ||
|
||
No output. | ||
|
||
<!--- END_TF_DOCS ---> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
terraform { | ||
required_providers { | ||
google = { | ||
source = "hashicorp/google" | ||
version = ">= 3.0" | ||
} | ||
} | ||
required_version = ">= 0.14" | ||
} |
Oops, something went wrong.