I’m using submodules in my terraform code. The problem that I’m running into is that in the config, which I am using to associate a subnet and the azurerm_subnet_route_table_association, is no longer referring to the subnet as it did in my tests which don’t use modules. What I’m getting instead is a “var.subnet_id”. I’m hoping there’s a simple solution that I’m just not seeing.
Section of mock in simple test:
"azurerm_subnet_route_table_association.association1": {
"address": "azurerm_subnet_route_table_association.association1",
"config": {
"route_table_id": {
"references": [
"azurerm_route_table.route_table1",
],
},
"subnet_id": {
"references": [
"azurerm_subnet.subnet1",
],
},
},
"count": {},
"depends_on": [],
"for_each": {},
"mode": "managed",
"module_address": "",
"name": "association1",
"provider_config_key": "azurerm",
"provisioners": [],
"type": "azurerm_subnet_route_table_association",
},
Section of terraform:
resource "azurerm_subnet_route_table_association" "association1" {
subnet_id = azurerm_subnet.subnet1.id
route_table_id = azurerm_route_table.route_table1.id
}
Section of mock with modules:
resources =
...
"module.dmz_nsg.azurerm_subnet_network_security_group_association.gateway_nsg_to_subnet": {
"address": "module.dmz_nsg.azurerm_subnet_network_security_group_association.gateway_nsg_to_subnet",
"config": {
"network_security_group_id": {
"references": [
"azurerm_network_security_group.gateway_subnet_nsg",
],
},
"subnet_id": {
"references": [
"var.subnet_id",
],
},
},
"count": {},
"depends_on": [],
"for_each": {},
"mode": "managed",
"module_address": "module.dmz_nsg",
"name": "gateway_nsg_to_subnet",
"provider_config_key": "module.dmz_nsg:azurerm",
"provisioners": [],
"type": "azurerm_subnet_network_security_group_association",
},
...
variables =
...
"dmz_subnet_name": {
"default": null,
"description": "",
"module_address": "",
"name": "dmz_subnet_name",
},
...
"module.dmz_route_table:subnet_id": {
"default": null,
"description": "",
"module_address": "module.dmz_route_table",
"name": "subnet_id",
},
...
outputs =
...
"module.dmz_subnet:subnet_id": {
"depends_on": [],
"description": "",
"module_address": "module.dmz_subnet",
"name": "subnet_id",
"sensitive": false,
"value": {
"references": [
"azurerm_subnet.subnet",
],
},
},
...
module_calls =
...
"dmz_route_table": {
"config": {
"location": {
"references": [
"var.location",
],
},
"rg_name": {
"references": [
"var.rg_name",
],
},
"rt_name": {
"references": [
"var.dmz_rt_name",
],
},
"standard_tags": {
"references": [
"var.standard_tags",
],
},
"subnet_id": {
"references": [
"module.dmz_subnet.subnet_id",
],
},
},
"count": {},
"depends_on": [
"module.dmz_subnet",
],
"for_each": {},
"module_address": "",
"name": "dmz_route_table",
"source": "./modules/route_table",
"version_constraint": "",
},
"dmz_subnet": {
"config": {
"prefixes": {
"references": [
"var.dmz_prefixes",
],
},
"rg_name": {
"references": [
"var.rg_name",
],
},
"subnet_name": {
"references": [
"var.dmz_subnet_name",
],
},
"vnet_name": {
"references": [
"module.hub_virtual_network.hub_vnet_name",
],
},
},
"count": {},
"depends_on": [
"module.hub_virtual_network",
],
"for_each": {},
"module_address": "",
"name": "dmz_subnet",
"source": "./modules/subnet",
"version_constraint": "",
},
main.tf
...
module "dmz_subnet" {
source = "./modules/subnet"
subnet_name = var.dmz_subnet_name
rg_name = var.rg_name
vnet_name = module.hub_virtual_network.hub_vnet_name
prefixes = var.dmz_prefixes
depends_on = [
module.hub_virtual_network,
]
}
...
module "dmz_route_table" {
source = "./modules/route_table"
location = var.location
rg_name = var.rg_name
rt_name = var.dmz_rt_name
subnet_id = module.dmz_subnet.subnet_id
standard_tags = var.standard_tags
depends_on = [
module.dmz_subnet,
]
}
...
modules/subnet/main.tf
resource "azurerm_subnet" "subnet" {
name = var.subnet_name
resource_group_name = var.rg_name
virtual_network_name = var.vnet_name
address_prefixes = var.prefixes
}
modules/route_table/main.tf
resource "azurerm_route_table" "route_table" {
name = var.rt_name
location = var.location
resource_group_name = var.rg_name
tags = var.standard_tags
}
resource "azurerm_subnet_route_table_association" "rt_association" {
subnet_id = var.subnet_id
route_table_id = azurerm_route_table.route_table.id
}