使用Terraform从OVF模板部署VM时设置静态IP报错求助
解决Terraform vSphere Provider部署OVF模板时静态IP配置报错问题
问题描述
使用Terraform的vSphere Provider从本地OVF模板部署虚拟机,需手动设置静态IP(DHCP不可用),但执行terraform plan时持续报错:
Argument named "ipv4_address" is not expected here.Argument named "ipv4_netmask" is not expected here.Argument named "ipv4_gateway" is not expected here.
原代码示例
OVF模板数据块
data "vsphere_ovf_vm_template" "ovfRemote" { name = "foo" disk_provisioning = "thick" datastore_id = data.vsphere_datastore.datastore.id host_system_id = data.vsphere_host.host.id resource_pool_id = data.vsphere_resource_pool.default.id local_ovf_path = "/path/to/ovf" ip_protocol = "IPV4" ip_allocation_policy = "STATIC_MANUAL" ovf_network_map = { "Network" : data.vsphere_network.network.id } }
虚拟机资源块(含错误配置)
resource "vsphere_virtual_machine" "vmFromLocalOvf" { name = "terraform-using-ovf-template" datacenter_id = data.vsphere_datacenter.datacenter.id datastore_id = data.vsphere_datastore.datastore.id host_system_id = data.vsphere_host.host.id resource_pool_id = data.vsphere_resource_pool.default.id wait_for_guest_net_timeout = 0 wait_for_guest_ip_timeout = 0 num_cpus = data.vsphere_ovf_vm_template.ovfRemote.num_cpus memory = data.vsphere_ovf_vm_template.ovfRemote.memory guest_id = data.vsphere_ovf_vm_template.ovfRemote.guest_id ovf_deploy { allow_unverified_ssl_cert = false enable_hidden_properties = false local_ovf_path = data.vsphere_ovf_vm_template.ovfRemote.local_ovf_path disk_provisioning = data.vsphere_ovf_vm_template.ovfRemote.disk_provisioning ip_protocol = data.vsphere_ovf_vm_template.ovfRemote.ip_protocol ip_allocation_policy = data.vsphere_ovf_vm_template.ovfRemote.ip_allocation_policy ovf_network_map = data.vsphere_ovf_vm_template.ovfRemote.ovf_network_map } #### 问题所在 ### network_interface { ipv4_address = "11.22.33.44" ipv4_netmask = 24 } ipv4_gateway = "55.66.77.88" }
报错信息
$ terraform plan ╷ │ Error: Unsupported argument │ │ on main.tf line 82, in resource "vsphere_virtual_machine" "vmFromLocalOvf": │ 82: ipv4_address = "10.112.128.22" │ │ An argument named "ipv4_address" is not expected here. ╵ ╷ │ Error: Unsupported argument │ │ on main.tf line 83, in resource "vsphere_virtual_machine" "vmFromLocalOvf": │ 83: ipv4_netmask = 24 │ │ An argument named "ipv4_netmask" is not expected here. ╵ ╷ │ Error: Unsupported argument │ │ on main.tf line 86, in resource "vsphere_virtual_machine" "vmFromLocalOvf": │ 86: ipv4_gateway = "10.112.128.1" │ │ An argument named "ipv4_gateway" is not expected here.
解决方案
错误原因
vsphere_virtual_machine资源的network_interface块不支持ipv4_address、ipv4_netmask参数,资源根层级也没有ipv4_gateway参数。通过OVF模板部署虚拟机时,静态IP配置必须通过OVF属性传递,而非直接修改虚拟机网络接口配置。
修正后的代码
先确认OVF模板的网络属性名称(参考下方方法),然后在ovf_deploy块中添加ovf_property配置:
resource "vsphere_virtual_machine" "vmFromLocalOvf" { name = "terraform-using-ovf-template" datacenter_id = data.vsphere_datacenter.datacenter.id datastore_id = data.vsphere_datastore.datastore.id host_system_id = data.vsphere_host.host.id resource_pool_id = data.vsphere_resource_pool.default.id wait_for_guest_net_timeout = 0 wait_for_guest_ip_timeout = 0 num_cpus = data.vsphere_ovf_vm_template.ovfRemote.num_cpus memory = data.vsphere_ovf_vm_template.ovfRemote.memory guest_id = data.vsphere_ovf_vm_template.ovfRemote.guest_id ovf_deploy { allow_unverified_ssl_cert = false enable_hidden_properties = false local_ovf_path = data.vsphere_ovf_vm_template.ovfRemote.local_ovf_path disk_provisioning = data.vsphere_ovf_vm_template.ovfRemote.disk_provisioning ip_protocol = data.vsphere_ovf_vm_template.ovfRemote.ip_protocol ip_allocation_policy = data.vsphere_ovf_vm_template.ovfRemote.ip_allocation_policy ovf_network_map = data.vsphere_ovf_vm_template.ovfRemote.ovf_network_map # 静态IP配置:属性名需匹配你的OVF模板定义 ovf_property = { "ip0" = "11.22.33.44" # 静态IP地址 "netmask0" = "255.255.255.0" # 子网掩码(部分模板支持CIDR格式,如24) "gateway" = "55.66.77.88" # 默认网关 # "dns0" = "8.8.8.8" # 可选:DNS服务器,按需添加 } } # 移除原错误的network_interface块和ipv4_gateway参数 }
确认OVF模板属性名方法
使用ovftool工具查看OVF模板的所有可配置属性:
ovftool --describe /path/to/your/template.ovf
输出结果中会列出所有属性,找到网络相关的参数名称(通常为ip0、netmask0、gateway等),替换到ovf_property中即可。
内容的提问来源于stack exchange,提问作者Ricky Palaguachi
相关产品推荐
相关产品推荐

