Как вывести имена хостов сервисов приложений, созданных с помощью for_each, в terraform? - PullRequest
0 голосов
/ 25 января 2020

У меня есть следующий модуль terraform:

provider "azurerm" {
}

variable "env" {
    type = string
    description = "The SDLC environment (qa, dev, prod, etc...)"
}

variable "appsvc_names" {
    type = list(string)
    description = "The names of the app services to create under the same app service plan"
}

locals {
    location = "eastus2"
    resource_group_name = "app505-dfpg-${var.env}-web-${local.location}"
}

resource "azurerm_app_service_plan" "asp" {
    name                = "${local.resource_group_name}-asp"
    location            = local.location
    resource_group_name = local.resource_group_name
    kind                = "Linux"
    reserved            = true

    sku {
        tier = "Basic"
        size = "B1"
    }
}

resource "azurerm_app_service" "appsvc" {
    for_each            = toset(var.appsvc_names)

    name                = "${local.resource_group_name}-${each.value}-appsvc"
    location            = local.location
    resource_group_name = local.resource_group_name
    app_service_plan_id = azurerm_app_service_plan.asp.id
}

# output "hostnames" {
#     value       = azurerm_app_service.appsvc[*].default_site_hostname
#     description = "The hostnames of the created app services"
# }

Это работает, но я хочу вывести имена хостов. Желательно в качестве карты, но на данный момент может быть в порядке и список.

Когда я раскомментирую оператор вывода и запускаю terraform apply, я получаю следующее:

Error: Unsupported attribute

  on ..\..\modules\web\main.tf line 42, in output "hostnames":
  42:     value       = azurerm_app_service.appsvc[*].default_site_hostname

This object does not have an attribute named "default_site_hostname".

Так как мне это сделать? вывести список (или лучше карту) имен хостов новых сервисов приложения?

(вопрос также размещен здесь - https://discuss.hashicorp.com/t/how-to-output-the-hostnames-of-app-services-created-with-for-each-in-terraform/5405)

1 Ответ

1 голос
/ 25 января 2020

Вы можете попробовать что-то вроде этого.

output "instance_private_ip_addresses" {
  # Result is a map from instance id to private IP address, such as:
  #  {"i-1234" = "192.168.1.2", "i-5678" = "192.168.1.5"}
  value = {
    for instance in aws_instance.example:
    instance.id => instance.private_ip
  }
}
...