【发布时间】:2020-07-01 19:40:58
【问题描述】:
我正在尝试为 terraform 定义一个模块测试框架,我的方法是使用 Pester,从本地执行配置程序调用以验证构建是否正确。
为此,我希望能够使用模块的输出,例如:
output "windows_ip_address" {
value = module.windowsservers.network_interface_private_ip
}
... 作为本地执行供应商的输入。例如:
module "windowsservers" {
source = "../../"
vm_hostname = "host${random_id.ip_dns.hex}-windows" // line can be removed if only one VM module per resource group
resource_group_name = azurerm_resource_group.test.name
is_windows_image = true
admin_username = var.admin_username
admin_password = var.admin_password
vm_os_simple = "WindowsServer"
vnet_subnet_id = azurerm_subnet.subnet1.id
}
resource "null_resource" "run-pestertest" {
provisioner "local-exec" {
#command = "..\\test_azurerm_compute.ps1 -vmhostname test -vmip ${module.windowsservers.network_interface_private_ip}"
command = "echo ${module.windowsservers.network_interface_private_ip}"
interpreter = ["pwsh", "-Command"]
}
depends_on = [module.windowsservers]
triggers = {
always_run = "${timestamp()}"
}
}
...但我得到了:
Error: Invalid template interpolation value: Cannot include the given value in a string template: string required.
我认为通过使用 depends_on 我可以强制 terraform 以这样一种方式将其绘制出来,即“windowsserver”模块将在 null_resource 之前失效 - 但我认为我的内容可能存在根本不正确的地方我在做!
谢谢 丹
【问题讨论】:
-
这个
output是来自同一个模块还是另一个模块? -
嗨,Matt - 这是上面配置中调用的模块 - 它位于上面两层的文件夹结构中。
-
这个错误听起来像是来自其他地方。如果您删除
null_resource并运行它会发生什么?如果您将null_resource替换为值为module.windowsservers.network_interface_private_ip的输出,会发生什么情况? -
我有
module.windowsservers.network_interface_private_ip作为输出值 - 如果我注释掉 null_resource 它可以工作。
标签: terraform