Terraform: получение адреса каждого шлюза подсети из списка. GCP

Если бы вы ранее ответили на вопрос, чтобы помочь с созданием набора подсетей из списка. Теперь я пытаюсь вывести каждый назначенный IP-адрес.

module "subnets" {
  source = "../../../Modules/subnets-test/"
  network_name = module.vpc.network_name
  subnet_region = "europe-west2"

  subnets = {
    lister = "192.2.128.0/18",
    kryten = "192.2.0.0/17",
    rimmer = "192.2.208.0/20",
    cat = "192.2.192.0/20",
    holly = "192.2.224.0/20"
  }
}

Могу успешно вывести список подсетей и их значения

output "private_subnets" {
  description = "List of IDs of private subnets"
  value       = ["${module.subnets.subnets}"]
}

Предоставляя мне все выходы подсети (один, как пример ниже)

 "rimmer" = {
    "creation_timestamp" = "2020-06-06T03:13:30.244-07:00"
    "description" = ""
    "gateway_address" = "192.2.208.1"
    "id" = "projects/red-dwarf/regions/europe-west2/subnetworks/rimmer"
    "ip_cidr_range" = "192.2.208.0/20"
    "log_config" = []
    "name" = "rimmer"
    "network" = "https://www.googleapis.com/compute/v1/projects/red-dwarf/global/networks/red-dwarf-vpc"
    "private_ip_google_access" = false
    "project" = "red-dwarf"
    "region" = "europe-west2"
    "secondary_ip_range" = []
    "self_link" = "https://www.googleapis.com/compute/v1/projects/red-dwarf/regions/europe-west2/subnetworks/rimmer"

Но теперь я просто хочу извлечь адрес шлюза в виде единственного вывода. Но все, что я пытаюсь сделать с модулем, выдает ошибку о том, что в списке 5 атрибутов.

Как я могу извлечь атрибуты из созданных подсетей, если они были предоставлены через карту (строку)?

Изменить - модуль подсети

resource "google_compute_subnetwork" "subnet" {
  network       = var.network_name
  for_each      = var.subnets
  name         = each.key
  ip_cidr_range = each.value

}

Edit - Subnet Output - это работает для вывода всего в целом.

output "subnets" {
  value       = google_compute_subnetwork.subnet
  description = "The created subnet resources"
}

person Pydam    schedule 06.06.2020    source источник
comment
Я не знаю, что на самом деле вставить. Раньше у меня был module.subnets.subnet1.gateway.address, но теперь это список, он не будет работать   -  person Pydam    schedule 06.06.2020
comment
Добавлено сейчас выше   -  person Pydam    schedule 06.06.2020
comment
Теперь добавлено. Не уверен, что это поможет, потому что выводит все, что есть в списке. Я просто не знаю, как извлечь эти отдельные элементы.   -  person Pydam    schedule 06.06.2020


Ответы (1)


Вот что бы я сделал:

locals {
  subnets = {
    cow = "10.0.208.0/20",
    cat = "10.0.192.0/20",
    dog = "10.0.224.0/20"
  }
}

provider "aws" {
  region = "us-east-1"
}

resource "aws_vpc" "myvpc" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_subnet" "subnet" {
  vpc_id     = aws_vpc.myvpc.id
  for_each   = local.subnets
  cidr_block = each.value
  tags       = { Name = each.key }
}

output "subnets" {
  value = aws_subnet.subnet
}

output "subnets_arn" {
  value = { for k, v in aws_subnet.subnet : k => v.arn }
}

Ключевым моментом здесь является цикл for:
value = { for k, v in aws_subnet.subnet : k => v.arn }
, который создает новый объект с ключом, именем и значением любого свойства, которое мы хотим.

Результат terraform приложения:

subnets_arn = {
  "cat" = "arn:aws:ec2:us-east-1:841836440307:subnet/subnet-046fff167cdc81e9f"
  "cow" = "arn:aws:ec2:us-east-1:841836440307:subnet/subnet-00217a1ec0531d2c6"
  "dog" = "arn:aws:ec2:us-east-1:841836440307:subnet/subnet-0ac82ef0fd87bcee2"
}



В моем случае я использую AWS (это то, к чему у меня есть доступ прямо сейчас), но то же самое должно быть переведено на GCP, просто используйте нужное свойство, обоснованное предположение должно быть примерно таким:

output "subnets_gateway_address" {
  value = { for k, v in aws_subnet.subnet : k => v.gateway_address }
}
person Helder Sepulveda    schedule 06.06.2020
comment
Отлично, спасибо. У меня что работает! Мой последний шаг - взять (в вашем примере) Cat и поместить его в диспетчер секретов со значением subnet-046fff167cdc81e9f. Как вы, наверное, заметили, я новичок не только в Terraform, но и в программировании в целом! - person Pydam; 06.06.2020