Terraform 从模块输出访问列表元素

Vic*_*nov 6 terraform

假设我有一个模块,它会生成一些 ids: module.tf:

resource "random_id" "etcdapiserver-id" {
  byte_length         = 4
  count               = "${var.etcd_apiserver_count}"
}
Run Code Online (Sandbox Code Playgroud)

模块_输出.tf:

output "etcdapiserver_hostname_list" {
  value = ["${random_id.etcdapiserver-id.*.hex}"]
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,列表成功地在输出中结束:

terraform output --module=module

etcdapiserver_hostname_list = [
    751adf6a,
    9e573ee7,
    edb94de3
]
Run Code Online (Sandbox Code Playgroud)

现在我想在主 terraform 配置中使用此列表中的元素。假设我正在 openstack 上创建多个计算实例: main.tf:

resource "openstack_compute_instance_v2" "etcdapiserver" {
  count   = "3"
  name    = "etcdapi-node-${element(module.ignition.etcdapiserver_hostname_list.*, count.index)}"
Run Code Online (Sandbox Code Playgroud)

但它会失败

错误:资源“openstack_compute_instance_v2.etcdapiserver”配置:“etcdapiserver_hostname_list.*”不是模块“ignition”的有效输出

有什么办法可以做到吗?谢谢!

Vic*_*nov 4

Terraform 贡献者在 GitHub 上回答了我的问题。

访问列表元素的一般语法是list[index]。在您的情况下,这将类似于 module.ignition.etcdapiserver_hostname_list[count.index]。