gpt4 book ai didi

azure - 等待\依赖于模块中父级中的资源

转载 作者:行者123 更新时间:2023-12-03 02:55:11 32 4
gpt4 key购买 nike

我在 main.tf 中创建资源组和 vNet,并在同一文件中引用模块。问题是,模块无法从模块访问这些资源。相关代码(删除了大部分代码,只留下相关部分):

main.tf:

module "worker" {
source = "./vmLoop"

vmName = "worker"
prefix = "${var.reference["name"]}"
loop = "${var.reference["workerCount"]}"
}

resource "azurerm_resource_group" "rg" {
name = "${var.reference["name"]}"
location = "${var.reference["location"]}"
}

如何在模块中引用此资源组?在 main.tf 中我可以这样做:"${azurerm_resource_group.rg.name}"。不仅如此,如果我想在模块内部使用数据,那将会失败,因为资源尚未创建(大部分代码被删除,只留下相关部分):

模块.tf:

data "azurerm_resource_group" "rg" {
name = "${var.prefix}"
}

如果我预先创建资源组\vnet,一切都会正常工作。

在arm模板中,我会添加一个dependsOn属性。但是,terraform 中的模块不支持 depends_on

最佳答案

在模块中,您应该传递子网 ID 或资源组,或者您作为变量创建的任何内容。例如,在您的主配置中,您可以调用以下内容:

module "vnet" {
source = "Azure/network/azurerm"
resource_group_name = "${var.resource_group}"
vnet_name = "${terraform.workspace}-vnet"
location = "${var.arm_region}"
address_space = "${var.arm_network_address_space}"
subnet_prefixes = ["${var.arm_subnet1_address_space}", "${var.arm_subnet2_address_space}"]
subnet_names = ["subnet1", "subnet2"]

tags = {
environment = "${terraform.workspace}"
}
}

然后使用 subnetID 调用 vmdeploy 模块,如下所示:

module "vmdeploy" {
source = "./vmdeploy"
subnetID = "${module.vnet.vnet_subnets[0]}"
}

通过引用其他模块作为 vmdeploy 模块的值,您将创建一个隐式依赖项,Terraform 将识别该依赖项并将其包含在资源图中。

在模块本身中,您可以定义一个名为subnetID的变量,如下所示:

var "subnetID" {}

这有帮助吗?

关于azure - 等待\依赖于模块中父级中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53393299/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com