Terraform技术问询:如何将字符串列表元素添加双引号并转为字符串格式以解决permissions参数类型错误
解决Terraform Google云自定义IAM角色权限列表合并的类型错误问题
咱们先明确问题根源:你当前的写法是把整个var.ext_permissions列表作为单个元素塞进了permissions数组里,而google_project_iam_custom_role的permissions参数要求的是纯字符串组成的列表,所以才会报类型不匹配的错误——那个被嵌入的列表本身不是字符串,不符合每个元素必须是字符串的要求。
其实根本不需要手动给列表元素加双引号,Terraform本身提供了更合适的方法来解决这个问题:用concat函数合并多个字符串列表。
修改你的main.tf代码如下:
resource "google_project_iam_custom_role" "my-custom-role" { role_id = "myCustomRole" title = "My Custom Role" description = "A description" # 使用concat合并固定权限列表和变量列表 permissions = concat( ["iam.serviceAccounts.create", "iam.serviceAccounts.getIamPolicy"], var.ext_permissions ) }
为什么这个写法能解决问题?
concat函数会把传入的多个字符串列表合并成一个完整的列表,每个权限都会作为独立的字符串元素存在,完全符合permissions参数对list(string)类型的要求。
你之前想手动给元素加双引号的思路是多余的,因为Terraform在处理list(string)类型时,会自动正确解析每个元素为字符串,手动添加引号反而会引入语法错误,比如把引号当成字符串的一部分,导致权限名称无效。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

