如何使用Local值为Azure Databricks User资源块配置用户参数
问题根因
你当前的代码直接将列表类型的local.name.display_name、local.name.user_name赋值给需要字符串类型参数的单实例资源,类型不匹配触发报错;且单资源块默认只能创建1个用户,需要添加循环逻辑批量创建2个用户。
实现方案
方案1:使用count适配现有local结构
不需要修改你现有的locals块,直接调整databricks_user资源块添加循环逻辑即可:
resource "databricks_user" "dbuser" { count = length(local.name.display_name) display_name = local.name.display_name[count.index] user_name = local.name.user_name[count.index] workspace_access = true }
注意:该方案依赖列表索引匹配用户属性,若后续调整用户列表顺序会触发已有资源的销毁重建,仅适合固定不变的短列表场景。
方案2:优化local结构+for_each(推荐)
先调整locals结构将用户属性配对,再用for_each循环创建资源,稳定性更高:
# 调整后的locals块 locals { users = [ { display_name = "Vincent Casinha" user_name = "vincent.casinha@contoso.com" }, { display_name = "Susan Young" user_name = "susan.young@contoso.com" } ] } # 调整后的databricks_user资源块 resource "databricks_user" "dbuser" { for_each = { for user in local.users : user.user_name => user } display_name = each.value.display_name user_name = each.value.user_name workspace_access = true }
该方案以用户邮箱作为唯一资源标识,后续调整用户列表顺序、增删用户都不会影响其他已有正常资源,是Terraform批量创建资源的官方最佳实践。
内容的提问来源于stack exchange,提问作者Pallab
相关产品推荐
相关产品推荐

