【问题标题】:unable to use JSON input for Terraform a map variable in Azure VM extension setting无法将 JSON 输入用于 Terraform Azure VM 扩展设置中的地图变量
【发布时间】:2022-08-20 11:24:34
【问题描述】:

我正在使用变量类型映射为 Azure Window VM 创建 SQL 扩展。

我的模块定义如下:

resource \"azurerm_virtual_machine_extension\" \"virtual_machine_extension\"{
  for_each = var.virtual_machine_extensions
  name = each.value[\"name\"]
  virtual_machine_id = lookup(var.virtual_machine_ids, each.value[\"virtual_machine_variable_name\"], null)
  publisher = each.value[\"publisher\"]
  type = each.value[\"type\"]
  type_handler_version = each.value[\"type_handler_version\"]
  settings = jsonencode(each.value[\"settings\"])
  tags = each.value[\"virtual_machine_extension_tags\"]

}

我的变量定义如下:

    variable \"virtual_machine_extensions\" {
      type = map(object({
       name = string
       virtual_machine_variable_name = string
       publisher = string
       type = string
       type_handler_version = string
       settings = any
       virtual_machine_extension_tags = map(string)
     }))
   }

   variable \"virtual_machine_ids\" {
     type    = map(string)
     default = {}
   }

virtual_machine_ids 将有一个虚拟机列表及其从主文件传递给它的相应 id

我的 tfvars 文件如下所示:

   virtual_machine_extensions = {
  virtual_machine_extension_sql ={
    name = \"vmsqlext\"   #Required
    virtual_machine_variable_name = \"windows_virtual_machine1\"  #Required , , variable name of windows virtual machine
    publisher = \"Microsoft.SqlServer.Management\"  #Required
    type = \"SqlIaaSAgent\" #Required
    type_handler_version = \"1.2\" #Required
    settings = <<EOF
    <<SETTINGS
    { 
      \"AutoTelemetrySettings\": { 
        \"Region\": \"West Europe\" 
      }, 
      \"AutoPatchingSettings\": { 
        \"PatchCategory\": \"WindowsMandatoryUpdates\", 
        \"Enable\": true, 
        \"DayOfWeek\": \"Sunday\", 
        \"MaintenanceWindowStartingHour\": \"2\", 
        \"MaintenanceWindowDuration\": \"60\" 
      }, 
      \"KeyVaultCredentialSettings\": { 
        \"Enable\": false, 
        \"CredentialName\": \"\" 
      }, 
      \"ServerConfigurationsManagementSettings\": { 
        \"SQLConnectivityUpdateSettings\": { 
            \"ConnectivityType\": \"Public\", 
            \"Port\": \"1433\" 
        }, 
        \"SQLWorkloadTypeUpdateSettings\": { 
            \"SQLWorkloadType\": \"GENERAL\" 
        }, 
        \"AdditionalFeaturesServerConfigurations\": { 
            \"IsRServicesEnabled\": \"true\" 
        } , 
        \"protectedSettings\": {       
        } 
      }
    } 
    SETTINGS
    EOF
    virtual_machine_extension_tags = {
      applicationName = \"Windows VM Extension\"
      approver        = \"IT Infrastructure\"
    }
  }
}

运行应用时收到以下错误

Error: unable to parse settings: json: cannot unmarshal string into Go value of type map[string]interface {}

相同的屏幕截图:

我知道问题来了,因为 JSON 输入没有被正确读取,我尝试通过传递带有和不带 <<SETTINGS SETTINGS 和 <<EOF EOF 的设置来运行代码,但它仍然抛出相同的错误

  • 当 JSON 在格式中存在语法错误时,通常会引发 Go 错误。首先用 JSON linter 检查它。快速浏览一下,您似乎在结尾附近有一个拼写错误,逗号前有空格。
  • @MattSchuchard 在验证格式后我仍然遇到同样的错误

标签: azure terraform


【解决方案1】:

你在用heredoc字符串做一些奇怪的事情。您同时拥有 <<EOF 和在其下方的 <<SETTINGS。尝试删除其中一个,如下所示:

settings = <<EOF
    { 
      "AutoTelemetrySettings": { 
        "Region": "West Europe" 
      }, 
      "AutoPatchingSettings": { 
        "PatchCategory": "WindowsMandatoryUpdates", 
        "Enable": true, 
        "DayOfWeek": "Sunday", 
        "MaintenanceWindowStartingHour": "2", 
        "MaintenanceWindowDuration": "60" 
      }, 
      "KeyVaultCredentialSettings": { 
        "Enable": false, 
        "CredentialName": "" 
      }, 
      "ServerConfigurationsManagementSettings": { 
        "SQLConnectivityUpdateSettings": { 
            "ConnectivityType": "Public", 
            "Port": "1433" 
        }, 
        "SQLWorkloadTypeUpdateSettings": { 
            "SQLWorkloadType": "GENERAL" 
        }, 
        "AdditionalFeaturesServerConfigurations": { 
            "IsRServicesEnabled": "true" 
        } , 
        "protectedSettings": {       
        } 
      }
    } 
EOF

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 2019-09-20
    • 2018-07-31
    • 1970-01-01
    • 2020-11-11
    • 2019-12-07
    • 2022-06-22
    • 1970-01-01
    相关资源
    最近更新 更多