Невозможно проанализировать «ip_configuration.0.subnet_id» как идентификатор ресурса: невозможно проанализировать Azure ID: проанализировать module.resource.subnet_id: недопустимый URI для запроса: вложено - PullRequest
0 голосов
/ 06 апреля 2020

Также для publi c Получение идентификатора ip: "

Ошибка: невозможно проанализировать" ip_configuration.0.public_ip_address_id "как идентификатор ресурса: невозможно проанализировать Azure ID: модуль синтаксического анализа. resource.azurerm_public_ip.primary.id: неверный URI для запроса "

Поскольку сеть является вложенным модулем для модуля ресурсов, подскажите, пожалуйста, где я пропускаю.

main. tf-файл:

#Select provider
provider "azurerm" {
  subscription_id = "xxxxxxxxxxxxxxxxxxxxxx"
  version = "~> 2.2"
  features {}
}

module "resource" {
  source = "./modules/resource"
  resource_group_name = "DevOpsPoc-primary"
  location = "southeastasia"
}

module "network" {
  source = "./modules/network"
  virtual_network = "primaryvnet"
  subnet = "primarysubnet"
  address_space = "192.168.0.0/16"
  address_prefix = "192.168.1.0/24"
  public_ip = "backendvmpip"
  location = "southeastasia"
  primary_nic = "backendvmnic"
  #vnet_subnet_id = element(module.network.vnet_subnets, 0)
  primary_ip_conf = "backendvm"
}

файл ресурса main.tf модуля:

resource "azurerm_resource_group" "primary" {
  name     = "var.resource_group_name"
  location = "var.location"
  tags = {
        environment = "env"
    }
}

файл main.tf сетевого модуля:

#Create Virtual Network in Primary Resource Group
resource "azurerm_virtual_network" "primary" {
  name                = "var.virtual_network"
  resource_group_name = "module.resource.azurerm_resource_group.primary.name"
  address_space       = ["var.address_space"]
  location            = "module.resource.azurerm_resource_group.primary.location"
  tags = {
        environment = "env"
    }
}

#Create Subnet in Virtual Network
resource "azurerm_subnet" "primary" {
  name                 = "var.subnet"
  resource_group_name  = "module.resource.azurerm_resource_group.primary.name"
  virtual_network_name = "module.resource.azurerm_virtual_network.primary.name"
  address_prefix       = "var.address_prefix"
#  tags = {
#        environment = "env"
#    }
}

output "subnet_id"{
  value = "module.resource.azurerm_subnet.primary.id"
  }

#Create public IP address
resource "azurerm_public_ip" "primary" {
    name                         = "var.public_ip"
    location                     = "module.resource.azurerm_resource_group.primary.location"
    resource_group_name          = "module.resource.azurerm_resource_group.primary.name"
    allocation_method            = "Dynamic"

    tags = {
        environment = "env"
    }
}

output "public_ip_id"{
  value = "module.resource.azurerm_public_ip.id"
  }

#Create Network Interface
resource "azurerm_network_interface" "primary" {
  name                = "var.primary_nic"
  location            = "module.resource.azurerm_resource_group.primary.location"
  resource_group_name = "module.resource.azurerm_resource_group.primary.name"

  ip_configuration {
        name                           = "var.primary_ip_conf"
        subnet_id                      = "module.resource.azurerm_subnet.primary.id"
        private_ip_address_allocation  = "Dynamic"
        public_ip_address_id           = "module.resource.azurerm_public_ip.primary.id"
    }
  tags = {
        environment = "env"
    }
}

1 Ответ

0 голосов
/ 07 апреля 2020

В ваших кодах необходимо исправить некоторые места:

  • Вам не нужны двойные кавычки "" в переменных или выражение относится к Синтаксис интерполяции . Например, "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
    }

}
...