错误:预期 template.0.mappings 是 JSON 对象。检查文档以了解预期的格式。 JSON 输入意外结束

问题描述 投票:0回答:1

我在 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,这是当前版本,但该行为是持久的。

terraform elastic-stack
1个回答
0
投票

问题似乎出在当前变量的格式上,我们在不需要映射时发送以下内容

mappings = ""

由于某种原因,terraform 不再喜欢这个选项并要求这样做:

mappings = "{}"

希望这对某人有帮助!!

© www.soinside.com 2019 - 2024. All rights reserved.