terraform - 预处理 Terraform Locals
问题描述
我有一堆 TF locals,,,,它使用一些三元运算符,当我通过 var.env stg 时,它工作正常,
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.
有没有办法预处理这个?
解决方案
It looks like what you need here is the result of the compact
function:
compact
takes a list of strings and returns a new list with any empty string elements removed.
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" : "",
])
}
推荐阅读
- java - 在常量表达式中使用 String.join
- node.js - NODE.JS - 如何使用 bcrypt 检查 Laravel 散列密码?
- angular - 如何将日期从 SpringBoot JPA 传递到 Angular
- c - 通过 rtp 识别 h264 中的 idr 数据包
- sql-server - 如何识别在 SSMS 中包含相同数据的不一致列标题
- assembly - 关于x86 I/O端口地址和IN/OUT指令的问题
- linux - 当您为其提供服务的默认端口号时返回服务名称的脚本
- c++ - 无法通过 lambda 的 const 值返回
- python - 使用 type() 在 python 中填充自定义类对象
- kotlin - 如何赶上动画的结尾