Terraform 预处理地形局部变量
我有一组TF局部变量,,,它使用了一些三元运算符,,,当我通过var.env stg时,它工作得很好Terraform 预处理地形局部变量,terraform,Terraform,我有一组TF局部变量,,,它使用了一些三元运算符,,,当我通过var.env stg时,它工作得很好 locals { allowed_roles = [ "rqm-airflow-task-prd", "${var.env == "stg" ? "rqm-airflow-task-stg" : "" }", "rqm-airflow-task-rnd&quo
locals {
allowed_roles = [
"rqm-airflow-task-prd",
"${var.env == "stg" ? "rqm-airflow-task-stg" : "" }",
"rqm-airflow-task-rnd",
"rqm-ecs-pag_mock-task-role-prd",
"${var.env == "stg" ? "rqm-ecs-pag_mock-task-role-stg" : "" }"
}
data "aws_iam_role" "allowed_roles" {
count = "${length(local.allowed_roles)}"
name = "${local.allowed_roles[count.index]}"
}
但stg是一个动态的环境,并不总是持续存在,
因此,删除stg env时,三元运算符值变为空“”,代码将使用var.env重新运行,如“prd”所示,然后data.aws_iam_role
失败
Error: Error refreshing state: 1 error occurred:
* data.aws_iam_role.allowed_roles: 4 errors occurred:
* data.aws_iam_role.allowed_roles[7]: data.aws_iam_role.allowed_roles.7: error reading IAM Role (): InvalidParameter: 1 validation error(s) found.
- minimum field size of 1, GetRoleInput.RoleName.
* data.aws_iam_role.allowed_roles[1]: data.aws_iam_role.allowed_roles.1: error reading IAM Role (): InvalidParameter: 1 validation error(s) found.
- minimum field size of 1, GetRoleInput.RoleName.
有没有办法对其进行预处理?看起来您需要的是:
compact
获取字符串列表并返回一个新列表,其中删除了所有空字符串元素
locals {
allowed_roles = compact([
"rqm-airflow-task-prd",
var.env == "stg" ? "rqm-airflow-task-stg" : "",
"rqm-airflow-task-rnd",
"rqm-ecs-pag_mock-task-role-prd",
var.env == "stg" ? "rqm-ecs-pag_mock-task-role-stg" : "",
])
}