【发布时间】:2019-11-04 23:26:04
【问题描述】:
我面临 terraform 模块和资源之间的依赖问题。我的模块依赖于资源,但我无法找到如何在 Terraform 中明确暗示这一点。在创建它所依赖的资源之前运行模块代码,这自然会导致错误。
我浏览了整个互联网,发现很少有关于依赖于其他模块的模块的讨论,包括一些关于如何解决模块中缺少“depends_on”的建议。但是,当模块依赖于资源时,我还没有找到任何建议/解决方法。
我尝试了以下建议,但无济于事
https://github.com/hashicorp/terraform/issues/16983
下面是我的标准 azure nic 和 vm 模块的代码
resource "azurerm_network_interface" "nic" {
name = "${var.nicName}"
resource_group_name = "${var.rgName}"
location = "${var.rgLocation}"
ip_configuration {
name = "vm-nic-configuration"
subnet_id = "${var.subnetId}"
private_ip_address_allocation = "dynamic"
}
}
resource "azurerm_virtual_machine" "vms" {
name = "${var.vmHostName}"
location = "${var.rgLocation}"
resource_group_name = "${var.rgName}"
network_interface_ids = ["${azurerm_network_interface.nic.id}"]
vm_size = "${var.vmSize}"
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
storage_image_reference {
publisher = "MicrosoftWindowsServer"
offer = "WindowsServer"
sku = "2016-Datacenter"
version = "latest"
}
storage_os_disk {
name = "${var.diskVol01Name}"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = "Standard_LRS"
}
os_profile {
computer_name = "${var.vmHostName}"
admin_username = "${var.vmUserName}"
admin_password = "${var.vmAdminPwd}"
}
os_profile_windows_config {
provision_vm_agent = true
enable_automatic_upgrades = true
}
depends_on = ["azurerm_network_interface.nic"]
}
这就是我在主模板文件中使用模块的方式
module "WinWeb01" {
source = "../modules/vmsetup"
nicName = "${var.prefix}-web-nic01"
rgName = "${azurerm_resource_group.rg.name}"
rgLocation = "${azurerm_resource_group.rg.location}"
vmHostName = "${var.prefix}-web01"
vmUserName = "vmAdmin"
vmAdminPwd = "${data.azurerm_key_vault_secret.vmPassword.0.value}"
availabilitySetId = "${azurerm_availability_set.webvmavailset.id}"
vmSize = "${var.vmSize}"
diskVol01Name = "${var.prefix}-web01-disk01"
availabilitySetCount = "${var.availabilitySetCount}"
subnetId = "${azurerm_subnet.subnets.1.id}"
}
我需要在不同的子网中启动虚拟机,所以我认为如果我将网络接口模板也添加到我的模块中并在调用模块时提供适当的子网 ID,这将是有益的。
但是问题是当我运行 terraform plan 时出现以下错误
module.WinWeb01.var.subnetId: Resource 'azurerm_subnet.subnets' not found for variable 'azurerm_subnet.subnets.1.id'
模块在子网实际创建之前寻找子网ID(子网代码在主模板文件中)。我看到很少有帖子建议使用depends_on 变量,但这在我的情况下不起作用。
https://medium.com/@bonya/terraform-adding-depends-on-to-your-custom-modules-453754a8043e
如果有人能在这里指导我正确的方向,将不胜感激。
【问题讨论】:
-
错误信息指出资源
azurerm_subnet.subnets不存在,根据贴出的代码是这样的。
标签: terraform terraform-provider-azure