Прежде всего, вы можете удалить кавычки для всех неконстантных выражений и оставить внутреннее внутреннее выражение. Чтобы начать обновление конфигурации, выполните команды terraform 0.12upgrade
.
Terraform 0.11 и более ранние версии требовали предоставления всех неконстантных выражений с помощью синтаксиса интерполяции, но этот шаблон теперь не рекомендуется. Чтобы отключить это предупреждение, удалите последовательность «$ {последовательность из начала и}» в конце этого выражения, оставив только внутреннее выражение.
Синтаксис интерполяции шаблона все еще используется для построения строк из выражений, когда шаблон включает в себя несколько последовательностей интерполяции или смесь буквенных строк и интерполяций. Это устаревание применяется только к шаблонам, которые полностью состоят из одной последовательности интерполяции.
Вызов дочернего модуля
Вызов модуля означает включение содержимое этого модуля в конфигурацию с указанием c значений для его входных переменных . Модули вызываются из других модулей, используя блоки module
:
module "servers" {
source = "./app-cluster"
servers = 5
}
Доступ к выходным значениям модуля
Ресурсы, определенные в модуле инкапсулированы , поэтому вызывающий модуль не может получить доступ к их атрибутам напрямую. Однако дочерний модуль может объявлять выходные значения для выборочного экспорта определенных значений, к которым должен обращаться вызывающий модуль.
Например, если модуль ./app-cluster
экспортировал значение output
с именем instance_ids
, то вызывающий модуль может ссылаться на этот результат, используя выражение module.servers.instance_ids
:
resource "aws_elb" "example" {
# ...
instances = module.servers.instance_ids
}
Для получения дополнительной информации о ссылках на именованные значения см. Выражения .
Например, , В этом случае вы не можете запросить значение из модуля как ваш код
network_interface_id = "module.network.azurerm_network_interface.primary.id"
Правильное выражение - module.<MODULE NAME>.<OUTPUT NAME>
. Это значение указанного output
значения из дочернего модуля, вызываемого текущим модулем. Вам следует запросить azurerm_network_interface.primary.id
из модуля network
следующим образом network_interface_id = module.network.primary_nic_id
Кроме того, поскольку блоки модулей объявлены в каталоге root в вашем коде, вы не можете напрямую ссылаться на них из вашего Файлы конфигурации дочерних модулей. Вы можете использовать входные переменные для передачи значения вашему дочернему модулю из модуля root. См. выходные значения .
Например, в модуле network
в каталоге root вы вызываете модуль resource
output devops_primary
из модуля network
следующим образом resource_group_name = module.resource.devops_primary
module "network" {
source = "./modules/network"
resource_group_name = module.resource.devops_primary
location = module.resource.location
virtual_network = "primaryvnet"
subnet = "primarysubnet"
address_space = ["192.168.0.0/16"]
...
}
в каталоге ./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
}
variable "resource_group_name" {
}
variable "location" {
}
Вы можете заново отредактировать ваши файлы конфигурации, следуя приведенным выше правилам. Дополнительные примеры вы можете найти azurerm modules .