尝试创建列表时发生错误:预期类型为“字符串”,不可转换类型为“ [] interface {}”

时间:2019-04-18 09:20:32

标签: terraform

我正在尝试创建一个ID列表,如下所示:

triggers = {
  cluster_instance_ids = "${list(aws_instance.controller.id, aws_instance.gateway.id, join(",", aws_instance.workers.*.id))}"
}

但是,将结果应用于:

  

触发器(cluster_instance_ids):”预期类型为“字符串”,具有不可转换的类型为[[] interface {}'

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

null_resource资源的triggers block带有字符串映射(例如map[string]string{}),因为您的错误消息在尝试读取cluster_instance_ids的值时指出作为字符串,并失败:

  

触发器(cluster_instance_ids):”预期类型为“字符串”,具有不可转换的类型为[[] interface {}'

删除不必要的list函数可以解决此问题,因为您剩下的是串联字符串:

triggers = {
  cluster_instance_ids = "${aws_instance.controller.id, aws_instance.gateway.id, join(",", aws_instance.workers.*.id)}"
}

在您的情况下,当您考虑将其作为实例ID的列表时,triggers块只是在寻找要更改的内容以知道它应该被触发,因此不会实际上很重要,因为数据类型是什么,所以字符串是最简单的选择。实际上,您在aws_instance.workers.*.id中已经有了一个列表,您可以使用join function将其转换为字符串。