使用Terraform从快照创建vSphere虚拟机报NoPermission错误如何解决
问题根因
该报错为权限类错误,与你提交的HCL配置语法无关:Terraform调用vSphere API执行虚拟机克隆后的磁盘调整操作时,使用的vSphere账号缺少存储策略相关的操作权限,涉及的两个权限点分别对应报错中的queryAssociatedProfile、PolicyIDByVirtualDisk操作。
排查步骤
- 确认当前Terraform使用的vSphere账号绑定的角色权限,重点检查存储策略相关权限是否被授予
- 确认权限的生效范围:权限需要覆盖对应数据中心、集群、虚拟机模板、目标存储、目标虚拟机文件夹所有关联对象,没有继承限制
- 用同一账号手动在vCenter控制台从相同模板克隆虚拟机,验证是否能成功完成,排除存储、模板本身的问题
解决思路
方案1:补充缺失权限
给vSphere账号绑定的角色添加以下权限即可解决,权限归属于**Profile-driven storage(配置文件驱动存储)**分类:
配置文件查询权限(对应
queryAssociatedProfile操作)
按虚拟磁盘查询策略ID权限(对应PolicyIDByVirtualDisk操作)
如果不需要做细粒度权限控制,也可以直接授予该分类下的全部只读权限。
方案2:显式跳过存储策略查询
如果你的环境没有使用自定义存储策略,可以通过配置跳过存储策略相关API调用,有两种配置方式:
- 在虚拟机资源的disk块中新增
storage_policy_id = ""参数,显式指定不关联存储策略:
disk { label = "disk0" size = data.vsphere_virtual_machine.template.disks.0.size eagerly_scrub = data.vsphere_virtual_machine.template.disks.0.eagerly_scrub thin_provisioned = data.vsphere_virtual_machine.template.disks.0.thin_provisioned storage_policy_id = "" }
- 如果你使用的是vSphere Provider 2.0及以上版本,可以在Provider配置中添加全局开关关闭存储策略检查:
provider "vsphere" { vsphere_server = var.vsphere_server user = var.vsphere_user password = var.vsphere_password allow_unverified_ssl = true # 新增如下参数关闭存储策略检查 disable_storage_policy_check = true }
内容的提问来源于stack exchange,提问作者Vũ Bùi Quang
相关产品推荐
相关产品推荐

