使用Terraform挂载多FS到多VM时定义NFS客户端报错求助
问题解决方法
你的错误根源是Terraform资源块内不能直接用for s in ...: {这种语法生成重复配置项,必须用dynamic块实现动态子配置块的生成。
修正后的main.tf资源代码如下:
resource "cloudplatform_files_filesystem_nfs_client_v1" "nfs_client" { for_each = var.nfsclients filesystem_id = cloudplatform_files_filesystem_v1.test[each.value.fileSname].id # 用dynamic块遍历hostnames生成客户端配置 dynamic "client" { for_each = each.value.hostnames content { host = cloudplatform_vcs_server_v1.vm[client.value].ipv4 permission = each.value.permissions # 复用变量里定义的权限,避免硬编码 protocol = each.value.protocol # 复用变量里定义的协议,避免硬编码 } } }
关键修改说明:
- 替换错误的循环语法为
dynamic "client" { ... }:这里的client需要匹配你所用云平台NFS客户端资源定义的子块名称(如果官方资源子块叫export_client这类其他名称,需对应修改) - 遍历元素通过
client.value引用,符合Terraform动态块的语法规范 - 把硬编码的权限和协议值,改成引用变量中定义的对应字段,更贴合你最初的变量设计逻辑
内容的提问来源于stack exchange,提问作者DrT
相关产品推荐
相关产品推荐

