Terraform在vCenter中可识别的cluster定义及查询方法
问题原因说明
你在vCenter目录中看到的Dev、QA、Production属于数据中心(Datacenter)对象,不是Terraformvsphere_compute_cluster数据源对应的计算集群对象。
vSphere的资源层级标准结构为:
- vCenter实例
- 数据中心(Datacenter,也就是你看到的Dev/QA/Production层级)
- 文件夹(可选,用于资源分类)
- 计算集群(Compute Cluster,即Terraform要匹配的对象,是多个ESXi主机的聚合资源组)
- ESXi主机节点
你把数据中心名称传入集群参数,自然无法匹配到对应资源。
- ESXi主机节点
- 计算集群(Compute Cluster,即Terraform要匹配的对象,是多个ESXi主机的聚合资源组)
- 文件夹(可选,用于资源分类)
- 数据中心(Datacenter,也就是你看到的Dev/QA/Production层级)
集群名称查询方法
你可以通过两种方式获取当前vCenter下的计算集群列表:
方法1:通过报错回显直接获取(仅用Terraform即可)
你可以临时给vsphere_compute_cluster的name参数填一个任意不存在的名称,执行terraform plan,Terraform的报错信息会直接列出当前数据中心下所有可用的计算集群名称,示例报错如下:
error fetching compute cluster: no compute cluster with name "test-fake-name" found in datacenter, available clusters are: dev-cluster-01, qa-cluster-01, prod-cluster-01
你直接从报错中取到实际集群名称回填即可。
方法2:通过vSphere官方CLI工具查询
你可以安装vSphere官方命令行工具govc,执行以下命令直接拉取全量集群列表:govc find / -type ClusterComputeResource
命令输出的结果为所有计算集群的完整路径,你可以直接取路径最后一段作为name参数值,如果集群存放在子文件夹下,直接填写完整路径即可。
正确配置示例
# 先指定要操作的数据中心,即你目录中的Dev/QA/Production其中一个 data "vsphere_datacenter" "dc" { name = "Dev" } # 再匹配对应数据中心下的计算集群 data "vsphere_compute_cluster" "cluster" { name = "dev-cluster-01" # 替换为你查询到的实际集群名称 datacenter_id = data.vsphere_datacenter.dc.id } resource "vsphere_virtual_machine" "vm" { name = var.vm_name resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id datastore_id = data.vsphere_datastore.datastore.id clone { template_uuid = data.vsphere_virtual_machine.template.id } # 其余配置保持不变 }
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

