【发布时间】:2020-10-09 10:31:03
【问题描述】:
地图/对象变量内的任何字符串属性的命令行输入都存在问题。 以下配置适用于以下命令。但是当我在对象变量中使用任何字符串属性时。失败了
terraform plan -var='storageProfile2={"storage_mb":102400,"backup_retention_days":15,"geo_redundant_backup_enabled":false}'
//main.tf
resource "azurerm_postgresql_server" "dmcdevops_postgress" {
name = "pstgressdb101"
location = azurerm_resource_group.dmc_rg_creation.location
resource_group_name = azurerm_resource_group.dmc_rg_creation.name
sku_name = "GP_Gen5_4"
backup_retention_days = var.storageProfile2.backup_retention_days
storage_mb = var.storageProfile2.storage_mb
geo_redundant_backup_enabled = var.storageProfile2.geo_redundant_backup_enabled
administrator_login = "sdfgsgfsg"
administrator_login_password = "H@Sh1CoR3!"
version = "11"
ssl_enforcement_enabled = true
}
//variables.tf
variable "storageProfile2" {
default = {
storage_mb = 102400
backup_retention_days = 15
geo_redundant_backup_enabled = false
}
type = object(
{
storage_mb = number
backup_retention_days = number
geo_redundant_backup_enabled = bool
}
)
}
以下配置不起作用。我刚刚将 administrator_login 作为字符串属性添加到对象变量中。 terraform plan 和 apply 使用默认值。
terraform plan -var='storageProfile2={"storage_mb":102400,"backup_retention_days":15,"geo_redundant_backup_enabled":false,"administrator_login":"pgadmin1223"}'
//main.tf
resource "azurerm_postgresql_server" "dmcdevops_postgress" {
name = "pstgressdb101"
location = azurerm_resource_group.dmc_rg_creation.location
resource_group_name = azurerm_resource_group.dmc_rg_creation.name
sku_name = "GP_Gen5_4"
backup_retention_days = var.storageProfile2.backup_retention_days
storage_mb = var.storageProfile2.storage_mb
geo_redundant_backup_enabled = var.storageProfile2.geo_redundant_backup_enabled
administrator_login = var.storageProfile2.administrator_login
administrator_login_password = "H@Sh1CoR3!"
version = "11"
ssl_enforcement_enabled = true
}
//varibale.tf
variable "storageProfile2" {
default = {
storage_mb = 102400
backup_retention_days = 15
geo_redundant_backup_enabled = false
administrator_login = "pgadmin"
}
type = object(
{
storage_mb = number
backup_retention_days = number
geo_redundant_backup_enabled = bool
administrator_login = string
}
)
}
错误信息
【问题讨论】:
-
请分享您在失败时收到的错误消息。
-
您在这里分享的内容并不是 100% 清楚,但这似乎是一个 shell 转义问题:我认为当 Terraform 看到您的论点时,shell 已经删除了所有引号
"等等语法不再有效。它适用于您的第一种情况,因为巧合的是,在属性名称上省略引号是有效的,但普通表达式中未加引号的标识符被理解为引用,并且变量值中不允许引用。 -
您在此处使用的引用应该适用于 Unix 样式的 shell,但如果您使用的是非 Unix 样式的 shell,例如 Windows 命令提示符或 PowerShell,它将无法正常工作。
-
@MartinAtkins。你说的对。它在转义双引号后起作用。我正在为此失去理智。谢谢。