【发布时间】:2020-12-13 07:06:14
【问题描述】:
我正在使用 terraform 创建 Azure VM 扩展资源azurerm_virtual_machine_extension。但是,我是否可以动态创建 settings 块?
variable "test_string" {
description = "boolean var to attach VM nics to lb"
type = string
default = ""
}
variable "test_script" {
description = "script locally"
type = string
default = ""
}
variable "file_uri" {
description = "script to download"
type = string
default = "https://example.com/azure-tests/custom_script.sh"
}
resource "azurerm_virtual_machine_extension" "ama_vm_extension" {
name = "tst-vm-extension"
virtual_machine_id = "xxxxx-xxxx-xxxxx"
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
type_handler_version = "2.0"
dynamic settings = <<SETTINGS
{
count = var.file_uri != "" ? 1: 0
"commandToExecute": "sh ${basename(var.file_uri)}",
"fileUris": ["${var.file_uri}"]
}
SETTINGS
dynamic settings = <<SETTINGS
{
count = var.test_string != "" ? 1: 0
content {
"commandToExecute": "${var.test_string}"
}
}
SETTINGS
dynamic settings = <<SETTINGS
{
count = var.test_script != "" ? 1: 0
content {
"script": "${base64encode(var.test_string)}"
}
}
SETTINGS
}
在上面的代码中,我想用test_string、test_script、file_uri vars 来控制资源行为。但是,terraform 在资源中只允许一个 settings 块,我不知道如何在这里使用 dynamic 块功能。因为我们最后有SETTINGS 字符串。
非常感谢您的帮助。
谢谢, 哈沙
【问题讨论】:
-
如果这三个设置互斥,则让三个 azurerm_virtual_machine_extension 消除动态块并将计数移至资源本身。如果它们不是互斥的,则使用对象变量并将其转换为 json。我没有时间对此进行测试,但这就是我要开始的地方。
标签: azure terraform terraform-provider-azure terraform0.12+