У нас есть система, которая использует несколько подсчитанных ресурсов.До сих пор они были жестко закодированы в 2. Я только что представил новую переменную pairs
со значением по умолчанию 1, поэтому мы можем начать увеличивать это значение.Если значение по умолчанию равно 1, результирующее plan
не показывает изменений.Вот два элемента в игре среди многих других:
data "template_file" "bootstrapuserdata" {
count = "${var.pairs * 2}"
template = "${file("${path.module}/startup.ps1")}"
vars {
domain = "${var.domain}"
region = "${var.region}"
publicIp = "${element(var.public_ips, count.index)}"
stack = "${var.stack}"
}
}
resource "aws_launch_configuration" "lc" {
count = "${var.pairs * 2}"
name_prefix = "lc-${element(var.private_subnet_ids, count.index)}-"
image_id = "${var.ami_id}"
instance_type = "${var.instance_type}"
iam_instance_profile = "${aws_iam_instance_profile.webserver_instance_profile.id}"
key_name = "${var.key_name}"
security_groups = ["${var.sg_id}", "${var.sg2_id}"]
user_data = "${data.template_file.bootstrapuserdata.*.rendered[count.index]}"
lifecycle {
create_before_destroy = true
}
}
Если я изменю значение pairs
на 2 (в результате счет для 4 для обоих элементов), я получаю следующую ошибку отplan
:
Error: Error refreshing state: 1 error(s) occurred:
* module.servers.aws_launch_configuration.lc: 2 error(s) occurred:
* module.servers.aws_launch_configuration.lc[3]: index 3 out of range for list data.template_file.bootstrapuserdata.*.rendered (max 2) in:
${data.template_file.bootstrapuserdata.*.rendered[count.index]}
* module.servers.aws_launch_configuration.lc[2]: index 2 out of range for list data.template_file.bootstrapuserdata.*.rendered (max 2) in:
${data.template_file.bootstrapuserdata.*.rendered[count.index]}
Похоже, что он не перерисован template_file
с обновленным счетчиком.Если я намеренно сломаю template_file
, то это будет подтверждено:
data "template_file" "bootstrapuserdata" {
count = "${var.pairs * 2}"
template = "${file("${path.module}/startup.ps1")}"
vars {
#domain = "${var.domain}"
region = "${var.region}"
publicIp = "${element(var.public_ips, count.index)}"
stack = "${var.stack}"
}
}
Вывод:
Error: Error refreshing state: 1 error(s) occurred:
* module.servers.data.template_file.bootstrapuserdata: 2 error(s) occurred:
* module.servers.data.template_file.bootstrapuserdata[1]: data.template_file.bootstrapuserdata.1: failed to render : 28:66: unknown variable accessed: domain
* module.servers.data.template_file.bootstrapuserdata[0]: data.template_file.bootstrapuserdata.0: failed to render : 28:66: unknown variable accessed: domain
Однако, если я действительно , то сломаю template_file
:
data "template_file" "bootstrapuserdata" {
count = "${var.pairs * 2}"
template = "${file("${path.module}/startup.ps1")}"
/*vars {
domain = "${var.domain}"
region = "${var.region}"
publicIp = "${element(var.public_ips, count.index)}"
stack = "${var.stack}"
}*/
}
Теперь он знает обо всех 4:
Error: Error refreshing state: 1 error(s) occurred:
* module.servers.data.template_file.bootstrapuserdata: 4 error(s) occurred:
* module.servers.data.template_file.bootstrapuserdata[3]: data.template_file.bootstrapuserdata.3: failed to render : 15:106: unknown variable accessed: domain
* module.servers.data.template_file.bootstrapuserdata[1]: data.template_file.bootstrapuserdata.1: failed to render : 15:106: unknown variable accessed: domain
* module.servers.data.template_file.bootstrapuserdata[2]: data.template_file.bootstrapuserdata.2: failed to render : 15:106: unknown variable accessed: domain
* module.servers.data.template_file.bootstrapuserdata[0]: data.template_file.bootstrapuserdata.0: failed to render : 15:106: unknown variable accessed: domain
Что происходит?Я наткнулся на ошибку Terraform?
Я начал день на Terraform 0.10.6, но обновился до 0.11.10 после просмотра этой проблемы - между ними нет никакой разницы.