首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform缺失地图元素

Terraform缺失地图元素
EN

Stack Overflow用户
提问于 2021-12-07 12:04:30
回答 1查看 1.4K关注 0票数 0

尝试映射SQL查询的结果。这在我看来是正确的,但是terraform会返回一个错误。

它不返回IP和服务器名称的任何空白结果。

哪里有窃听器吗?在我看来是对的。

我有main.tf

代码语言:javascript
复制
/*
 * admin database
 */

module "sql-servers-admindb" {
  source = "../terraform-modules/terraform-data-db"

  dbtype = "mysql"
  connection = {
    mysql = {
      host  = local.mysql-admin_credentials.dbhost
      user  = local.mysql-admin_credentials.dbuser
      pass  = local.mysql-admin_credentials.dbpass
      dbase = local.mysql-admin_credentials.dbname
    }
    sqlite = null
  }

   debugfile = "debug.json"

 
  query = {
    sqlquery = <<EOT
SELECT sd.serwer_id, sd.ip_local, sd.host_mysql
    FROM serwer_panel sd
    JOIN serwer_serwer_grupa ssg ON ssg.serwer_id = sd.serwer_id 
    JOIN serwer_grupa sg ON ssg.serwer_grupa_id = sg.id
EOT
  }
}


module "terraform-sql" {
  source = "../terraform-modules/terraform-sql"
  depends_on = [module.sql-servers-admindb]
  for_each = { for sql in module.sql-servers-admindb.result.sqlquery : sql.serwer_id => sql }
  general = { 
     zone = "sql.${var.dns_local_name[local.environment]}."
     ptr_networks = "${var.dns_local_reverse_allowed[local.environment]}"
  }
}

terraform-模块/terraform-sql/main.tf

代码语言:javascript
复制
// IP address and A record
module "sql-nsrecord_a" {
  source       = "../terraform-modules/terraform-generic-nsrecord
  zone         = "{var.general.zone}."
  name         = "${var.sql.serwer_id}."
  type         = "A"
  records      = [var.sql.local_ip]
  ptr_networks = var.general.ptr_networks
}
代码语言:javascript
复制
/*
 * General
 */

variable "general" {
  type = object({
    zone    = string
    ptr_networks = list(any)
  })
  default = {
    zone  = ""
    ptr_networks  = []
  }
}


/*
 * SQL records
 */

variable "sql" {
  type    = map(any)
  default = {}
}

示例debug.json

代码语言:javascript
复制
Array
(
    [sqlquery] => Array
        (
            [0] => Array
                (
                    [serwer_id] => s12
                    [ip_local] => 127.0.0.1
                    [host_mysql] => 
                )

返回错误:

代码语言:javascript
复制
│ Error: Missing map element
│ 
│   on ../terraform-modules/terraform-sql/main.tf line 9, in module "sql-nsrecord_a":
│    9:   name         = "${var.sql.serwer_id}."
│     ├────────────────
│     │ var.sql is empty map of dynamic
│ 
│ This map does not have an element with the key "serwer_id".
╵


╷
│ Error: Missing map element
│ 
│   on ../terraform-modules/terraform-sql/main.tf line 11, in module "sql-nsrecord_a":
│   11:   records      = [var.sql.local_ip]
│     ├────────────────
│     │ var.sql is empty map of dynamic
│ 

我正在征求关于如何改进它的意见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-07 12:17:48

您似乎没有将变量sql传递给terraform-sql模块,因此使用了它的默认值:

代码语言:javascript
复制
  default = {}

因此有一张空地图。难怪它不包含一些条目。

你需要修改你的

代码语言:javascript
复制
module "terraform-sql" {
...
}

传递sql参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70259816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档