Terraform新手求助:如何引用random_shuffle生成的随机值?
在Terraform中引用random_shuffle生成的随机值并传递给其他资源
1. 确认random_shuffle配置的正确性
你的random_shuffle配置是有效的:
input传入本地列表local.dslist,指定了随机数据源result_count = 1表示从输入列表中随机选出1个元素,最终result属性会返回一个长度为1的列表(即便只选1个元素,result依然保持列表类型)
2. 正确传递随机值给其他资源
你当前错误使用了var.random_dslist(这是引用输入变量的语法),实际应该直接引用random_shuffle资源的输出属性。
由于random_shuffle.random_dslist.result是列表类型,而vsphere_datastore的name参数需要单个字符串,所以要通过索引[0]取出列表里的唯一元素。另外Terraform 0.12+版本支持直接引用资源属性,无需${}插值语法,写法更简洁。
修改后的完整代码如下:
locals { dslist = [ "Datastore1", "Datastore2", "Datastore3" ] } resource "random_shuffle" "random_dslist" { input = local.dslist result_count = 1 } output "random_dslist" { value = random_shuffle.random_dslist.result[0] # 改为直接输出单个值,更直观 } data "vsphere_datastore" "datastore" { name = random_shuffle.random_dslist.result[0] datacenter_id = data.vsphere_datacenter.dc.id }
补充说明
- 如果需要随机多个元素,只需调整
result_count的值,引用时按需取对应索引的元素即可 - 每次执行
terraform apply时,random_shuffle会重新生成随机值(若要固定结果,可设置keepers参数绑定特定条件)
内容的提问来源于stack exchange,提问作者vespavbb
相关产品推荐
相关产品推荐

