我在 tf cloud 中运行模块时遇到问题。
这是当前状态:
我正在使用 terraform cloud 版本 1.4.5 和弹性堆栈模块 v0.11.0。这是针对我们通常仅为了测试而部署的开发环境,因此我们需要在每次不使用它时销毁它。最后一次工作时间是2个月前。
今天我们尝试启动环境,发现由于以下错误,我们所有的索引模板都无法创建:
Error: expected template.0.mappings to be a JSON object. Check the documentation for the expected format. unexpected end of JSON input
with module.index_template.elasticstack_elasticsearch_index_template.default["test-p1"]
on modules/index_template/main.tf line 30, in resource "elasticstack_elasticsearch_index_template" "default":
mappings = each.value.mappings
自上次工作会话以来,我们尚未对文件或其变量进行任何更改。
主.tf
1 # -----------------------------------> Providers Section <-----------------------------------
2 terraform {
3 required_version = ">= 1.4.5"
4
5 required_providers {
6 elasticstack = {
7 source = "elastic/elasticstack"
8 version = ">= 0.11.0"
9 }
10 }
11 }
12 resource "elasticstack_elasticsearch_index_template" "default" { # Creation of Index Templates
13 for_each = var.index_templates
14
15 name = each.key
16 priority = each.value.priority
17 index_patterns = each.value.index_patterns
18
19 template {
20 settings = jsonencode({
21 number_of_shards = each.value.number_of_shards,
22 number_of_replicas = each.value.number_of_replicas,
23 "lifecycle.name" = each.value.lifecycle_name,
24 refresh_interval = each.value.refresh_interval,
25 max_docvalue_fields_search = each.value.max_docvalue_fields_search,
26 "mapping.total_fields.limit" = each.value.total_fields_limit
27 })
28
29 mappings = each.value.mappings
30 }
31 }
变量.tf
variable "index_templates" { # Creation of Index Templates (ixt)
type = map(object({
priority = number
index_patterns = list(string)
number_of_shards = number
number_of_replicas = number
lifecycle_name = string
refresh_interval = string
max_docvalue_fields_search = number
total_fields_limit = number
mappings = string
}))
我们尝试升级到模块版本 0.11.7,这是当前版本,但该行为是持久的。
问题似乎出在当前变量的格式上,我们在不需要映射时发送以下内容
mappings = ""
由于某种原因,terraform 不再喜欢这个选项并要求这样做:
mappings = "{}"
希望这对某人有帮助!!