【发布时间】:2019-01-26 18:20:44
【问题描述】:
我即将在 azure 中创建一个带有 terraform 的小型 VM,但遇到了一个奇怪的问题。 Terraform 创建了我的资源组,但在创建属于资源组的下一个对象(VNet)时立即失败:
resource "azurerm_resource_group" "simple_vm" {
name = "simple_vm"
location = "westeurope"
}
resource "azurerm_virtual_network" "main" {
name = "main"
address_space = ["10.0.0.0/16"]
location = "westeurope"
resource_group_name = "simple_vm"
}
调用terraform apply 会导致:
* azurerm_virtual_network.main: 1 error(s) occurred:
* azurerm_virtual_network.main: Error Creating/Updating Virtual Network "main" (Resource Group "simple_vm"): network.VirtualNetworksClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: autorest/azure: Service returned an error. Status=404 Code="ResourceGroupNotFound" Message="Resource group 'simple_vm' could not be found."
查看网页界面显示,资源组已创建。再次调用 terraform apply 会正确找到它并在资源组内创建 VNet。
对我来说,这看起来像是 terraform 尝试在资源组中创建对象,而它尚未在 azure 中完全实例化。我观察到公共 IP 的类似行为:我创建了一个具有公共 IP 的 VM,并包含一个 output ... 以打印 VM 的公共 IP。第一次运行时,输出为空(但没有错误消息)。在terraform refresh 之后,输出填充了IP。
我做错了吗?这是 terraform 中的错误吗?
【问题讨论】:
-
这只是一个与stackoverflow.com/questions/51932165/… 一样的通用依赖排序问题。使用
dependson 或将资源组的结果插入到虚拟网络资源中,以便 Terraform 知道按什么顺序执行操作。我猜我们可能应该为此创建一个通用的、规范的问题/答案组合。 -
这是一个插值示例。正如 ydestskorR 所说,这将为您设置依赖项。 resource_group_name = "${azurerm_resource_group.simple_vm.name}"