地形列表元素超出范围?

时间:2018-07-13 20:20:01

标签: indexing indexoutofboundsexception terraform

从Terraform文档:

  

element(list,index)-从列表中的给定索引处返回单个元素。如果索引大于元素数,则此函数将使用标准的mod算法进行包装。

使用mod打包的好理由是什么?在我看来,这种行为可能是造成很多头痛的原因。

在我的头顶上,我只记得另外两种方法来处理超出范围的元素:

  • Python / Ruby:返回None / Nil
  • Java / JS / Ruby:引发错误

我对他们已经习惯了,他们似乎很有意义,您什么也没有得到或者没有错误,但是为什么您会期望将k mod n元素添加到列表中呢?如果您是实施者,您将如何证明这种行为选择的合理性。

1 个答案:

答案 0 :(得分:2)

这是您必须自己进行修改的快捷方式,但是在循环访问简短列表(例如要放入多个实例的子网数量或可用区)时很有用。

这是一种非常常见的模式,出现在aws_subnet_ids data source docs中:

data "aws_subnet_ids" "private" {
  vpc_id = "${var.vpc_id}"
  tags {
    Tier = "Private"
  }
}

resource "aws_instance" "app" {
  count         = 6
  ami           = "${var.ami}"
  instance_type = "t2.micro"
  subnet_id     = "${element(data.aws_subnet_ids.private.ids, count.index)}"
}

如果要使用slice operator,则当实例数超过数据源返回的子网数时,将立即获得索引越界异常。