Terraform使用count获取列表值异常:每次输出abc求排查
问题分析与解决
核心错误原因
你遇到的问题根源在于变量类型不匹配:
server_num变量被定义为字符串类型(默认值是"1"),但Terraform的count参数要求接收数字类型。当你传入字符串"3"时,Terraform会将非空字符串隐式转换为布尔值true,再转成数字1,最终只创建1台虚拟机,自然只会读取var.vmi[0]即abc。
修正步骤
1. 修正server_num变量的类型定义
修改variables.tf中的server_num变量,明确指定为数字类型,同时可添加列表长度验证避免索引越界:
variable "server_num" { type = number default = 1 description = "Number of virtual machines to provision" } variable "vmi" { type = list(string) default = [] validation { condition = length(var.vmi) >= var.server_num error_message = "The length of the vmi list must be at least equal to server_num to avoid index out of bounds." } }
2. 传递数字类型的server_num值
修改cluster.tf中模块调用的server_num参数,去掉引号,传入数字:
module "provision" { source = "git:://https://example.com/repo.git" server_num = 3 # 使用数字而非字符串 vmi = ["abc", "cde", "def"] }
3. 确保main.tf中count的正确使用
如果main.tf是provision模块内的代码,确认使用模块的变量:
resource "vpshere_virtual_machine" "vm" { count = var.server_num # 此时var.server_num是数字类型,会创建3台VM name = var.vmi[count.index] }
验证效果
修正后,Terraform会根据server_num=3创建3台虚拟机,分别使用vmi列表中的abc、cde、def作为名称。
内容的提问来源于stack exchange,提问作者user312307
相关产品推荐
相关产品推荐

