【发布时间】: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 在验证格式后我仍然遇到同样的错误