Терраформировать | После Обновления До 0.12 Появляется Множество Ошибок «Неподдерживаемое Значение Для «%S» В 0: Требуется Строка».

  • Автор темы Cristoball7
  • Обновлено
  • 21, Oct 2024
  • #1
;

После обновления до 0.12 я получаю множество ошибок, например:

 
 
 
 output "instance_names" {

value = [

"${data.template_file.instance_tags_name.*.rendered}",

]
}
 

Вот с моего main.ft:

module "mongodb" { source = "../modules/mongodb" instance_count = "1" environment = var.env instance_type = "i3.large" subnet_id = element(tolist(data.aws_subnet_ids.private.ids), 0) associate_public_ip_address = false vpc_id = data.aws_vpc.vpc.id tags = merge( { "Environment" = var.env }, var.default_tags, ) iam_instance_profile = var.iam_instance_profile route53_zone_id = data.aws_route53_zone.zone.zone_id ami = var.ami } output "mongodb_private_ip" { value = module.mongodb.private_ip } output "tags" { value = module.mongodb.instance_names }

И модуль:

connection_strings_mongodb_standalone = join( "\n", formatlist( "%s ansible_host=%s ansible_user=ubuntu", module.mongodb.instance_names, module.mongodb.private_ip, ),

из ../modules/mongodb output.tf:

Error: Error in function call on main.tf line 136, in data "template_file" "inventory": 136: formatlist( 137: 138: 139: 140: |---------------- | module.mongodb.instance_names is tuple with 1 element | module.mongodb.private_ip is list of string with 1 element Call to function "formatlist" failed: error on format iteration 0: unsupported value for "%s" at 0: string required.

Как я правильно понимаю, нужно установить тип выходного значения, но не могу найти, как это сделать, надеюсь, кто-нибудь мне поможет.

Заранее спасибо.

Cristoball7


Рег
15 Nov, 2005

Тем
67

Постов
174

Баллов
519
  • 25, Oct 2024
  • #2

В сообщении об ошибке есть подсказка, но она полезна только в том случае, если вы знаете, что ищете:

 
 
 output "instance_names" {

value = data.template_file.instance_tags_name.*.rendered
}
 

Ваше заявление о formatlist output includes this expression:

count

[ ... ] part of this returns a list of strings, and then the data.template_file.instance_tags_name.*.rendered вокруг него затем оборачивается дополнительный список (или, скорее, кортеж), создавая одноэлементный кортеж, содержащий список строк. Вот почему кортеж содержит только один элемент, а не имеет по элементу для каждого из ваших элементов. ["${data.template_file.instance_tags_name.*.rendered}"] instances.

Эта ситуация описана в руководстве по обновлению в разделе Обращение к переменным списка, и эта документация включает дополнительную информацию о том, почему это раньше работало в версии 0.11 и почему изменения необходимы сейчас.

Чтобы это исправить, вам следует обращаться только к выражению splat, создавая плоский список строк, которые вы instance_names call is expecting:

| module.mongodb.instance_names is tuple with 1 element | module.mongodb.private_ip is list of string with 1 element

Инструмент автоматического обновления конфигурации, описанный в руководство по обновлению в некоторых случаях может внести это изменение автоматически, поэтому я бы рекомендовал использовать его в качестве отправной точки для процесса обновления до версии 0.12. Он не способен исправить все, но он выполнит за вас большую часть простой работы по переписыванию и выдаст предупреждения о некоторых более сложных ситуациях, с которыми он не может справиться.

 

Надежда Беланов


Рег
08 Aug, 2011

Тем
69

Постов
199

Баллов
564
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно