В ваших кодах необходимо исправить некоторые места:
- Вам не нужны двойные кавычки
""
в переменных или выражение относится к Синтаксис интерполяции . Например, "var.virtual_network"
должно быть var.virtual_network
. - . Вы можете напрямую ссылаться на ресурсы в том же файле
main.tf
, а не в блоке модуля. Например, измените virtual_network_name = "module.resource.azurerm_virtual_network.primary.name"
на virtual_network_name = azurerm_virtual_network.primary.name
в блоке resource "azurerm_subnet"
. - Синтаксис для ссылки на выходы модуля:
${module.NAME.OUTPUT}
, где NAME
- это имя модуля, указанное в заголовке модуля. блок конфигурации и OUTPUT
- это имя выхода для ссылки. Вы можете объявить имя и расположение группы ресурсов в module "network"
вместо того, чтобы использовать ее из файла ./modules/network/main.tf
.
Вот рабочий код, и вы можете получить больше ссылок в этом документе :
файл main.tf в каталоге root
module "resource" {
source = "./modules/resource"
resource_group_name = "DevOpsPoc-primary"
location = "southeastasia"
}
module "network" {
source = "./modules/network"
resource_group_name = module.resource.RGname
location = module.resource.location
virtual_network = "primaryvnet"
subnet = "primarysubnet"
address_space = ["192.168.0.0/16"]
address_prefix = "192.168.1.0/24"
public_ip = "backendvmpip"
primary_nic = "backendvmnic"
#vnet_subnet_id = element(module.network.vnet_subnets, 0)
primary_ip_conf = "backendvm"
}
main.tf в каталоге ./modules/resource
variable "resource_group_name" {}
variable "location" {}
resource "azurerm_resource_group" "primary" {
name = var.resource_group_name
location = var.location
}
output "RGname" {
value = "${azurerm_resource_group.primary.name}"
}
output "location" {
value = "${azurerm_resource_group.primary.location}"
}
main.tf в каталог ./modules/network
, а также объявлять переменные в том же каталоге.
#Create Virtual Network in Primary Resource Group
resource "azurerm_virtual_network" "primary" {
name = var.virtual_network
resource_group_name = var.resource_group_name
address_space = var.address_space
location = var.location
}
#Create Subnet in Virtual Network
resource "azurerm_subnet" "primary" {
name = var.subnet
resource_group_name = var.resource_group_name
virtual_network_name = azurerm_virtual_network.primary.name
address_prefix = var.address_prefix
}
output "subnet_id"{
value = azurerm_subnet.primary.id
}
#Create public IP address
resource "azurerm_public_ip" "primary" {
name = var.public_ip
location = var.location
resource_group_name = var.resource_group_name
allocation_method = "Dynamic"
}
output "public_ip_id"{
value = azurerm_public_ip.primary.id
}
#Create Network Interface
resource "azurerm_network_interface" "primary" {
name = var.primary_nic
location = var.location
resource_group_name = var.resource_group_name
ip_configuration {
name = var.primary_ip_conf
subnet_id = azurerm_subnet.primary.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.primary.id
}
}