Terraform部署vSphere时如何配置ovf:userConfigurable="false"的vApp属性?
Terraform部署vSphere时配置
ovf:userConfigurable="false"的vApp属性方案 问题背景
通过Terraform将OVF/OVA部署到vSphere时,无法配置带有ovf:userConfigurable="false"标记的vApp属性。已知ovftool提供-X EnableHiddenProperties选项,可在PowerShell等场景下编辑这类隐藏属性,需要了解Terraform中是否有对应实现方式。
现有Terraform配置(.tf文件)
terraform { required_providers { vsphere = { source = "hashicorp/vsphere" version = ">= 2.0.2" } } required_version = ">= 1.0.10" } provider "vsphere" { ... } ## Local OVF/OVA Source data "vsphere_ovf_vm_template" "ovfLocal" { name = "uagterraformdeploy" ... } ## Deployment of VM from Local OVF resource "vsphere_virtual_machine" "vmFromLocalOvf" { name = "uagterraformdeploy" ... vapp { properties = { "prop1" = "value1", "prop2" = "value2", } } }
对应的OVF文件片段
<Property ovf:key="prop1" ovf:type="string" ovf:userConfigurable="false"> <Label>Prop 1</Label> <Description> ... </Description> </Property> <Property ovf:key="prop2" ovf:type="string" ovf:userConfigurable="false"> <Label>Prop 2</Label> <Description> ... </Description> </Property>
报错信息
Error: error while creating vapp properties config vApp property with userConfigurable=false specified in vapp.properties: [prop1]
解决方案
目前Terraform官方的vSphere provider(hashicorp/vsphere)没有直接对应-X EnableHiddenProperties的配置项,可通过以下两种方式解决:
修改OVF文件属性
直接编辑目标OVF文件,将需要配置的属性的ovf:userConfigurable值从false改为true,之后再用Terraform正常部署。部署完成后,若需要恢复原属性设置,可通过vSphere客户端或重新编辑OVF文件调整。通过local_exec调用ovftool部署
放弃使用vsphere_virtual_machine资源直接部署OVF,改用local_exec资源调用ovftool并带上-X EnableHiddenProperties参数完成部署,之后可将虚拟机导入Terraform状态进行后续管理。示例配置如下:
resource "null_resource" "deploy_ovf" { provisioner "local-exec" { command = <<EOT ovftool -X EnableHiddenProperties \ --prop:prop1=value1 \ --prop:prop2=value2 \ "/path/to/your.ova" \ "vi://username:password@vcenter-host/datacenter/host/cluster" EOT } # 部署完成后将虚拟机导入Terraform状态(可选) provisioner "local-exec" { command = "terraform import vsphere_virtual_machine.vmFromLocalOvf /datacenter/vm/uagterraformdeploy" } } # 后续管理虚拟机的配置 resource "vsphere_virtual_machine" "vmFromLocalOvf" { name = "uagterraformdeploy" # 仅配置需要Terraform管理的属性,避免与ovftool部署的设置冲突 ... }
此外,可关注vSphere provider的官方更新,查看是否有相关功能的新增计划。
内容的提问来源于stack exchange,提问作者Soham Agarwal
相关产品推荐
相关产品推荐

