Puncte:1

GCP Terraform: Imposibil de setat subrețele pentru a fi promovate prin BGP pe routerul cloud

drapel ua

Încerc să creez un router cloud, cu două intervale de rețea fiind afișate din el, cu toate acestea, primesc niște erori foarte vagi de la terraform și nu prea pot pune degetul pe ce este în neregulă.

resursă „google_compute_router” „router1” {
  nume = "${var.alias}-prod1-ha-vpn-cloud-router-1"
  proiect = var.nume_proiect
  network = var.network1
  regiune = var.region1
  bgp {
    asn = var.asn
    advertise_mode = „PERSONALIZAT”
    dinamic „advertised_ip_ranges” {
      for_each = var.advertised_ip_ranges_prod1
      continut {
        interval = advertised_ip_ranges_prod1.value["cidr"]
        description = advertised_ip_ranges_prod1.value["desc"]
      }
    }
  }
}

Și codul real al modulului:

modul „vpn-ha-gateway” {
  sursa = "-----"
  nume_proiect = var.nume_proiect
  client = var.client
  alias = var.alias
  regiune1 = var.regiune1
  count = (var.vpn_type == "ha-vpn" ? 1 : 0) ## Construiți dacă vpn_type este ha-vpn
  network1 = module.prod1-vpc.self_link
  customer_redundancy = var.customer_redundancy
  customer_ha_vpn_peers = var.customer_ha_vpn_peers
  shared_secret = var.shared_secret
  asn = var.asn
  cust_asn = var.cust_asn
  advertised_ip_ranges_prod1 = var.advertised_ip_ranges_prod1
}

Definim advertised_ip_ranges_prod1 ca o hartă, deoarece nu știm câte vor fi pe modul:

variabila „advertised_ip_ranges_prod1” {
  tip = listă(hartă(șir))
  description = „anunțat de BGP pe prod1”
  implicit = [
    {
        cidr = "1.2.3.4/28" ## Gama promovată Prod1
        desc = „gamă secundară anunțată prin BGP”
    },
    {
        cidr = "5.6.7.8/28" # Testați intervalul de publicitate
        desc = „Interval de testare anunțat prin BGP”
    },
  ]
}

Și în timp ce am alte module construite în același mod (cu for_each) funcționând corect, acesta continuă să arunce aceste erori vagi:

Eroare: referire la resursa nedeclarată

  pe .terraform\modules\vpn-ha\main.tf linia 36, ​​în resursa „google_compute_router” „router1”:
  36: interval = advertised_ip_ranges_prod1.value["cidr"]

O resursă gestionată „advertised_ip_ranges_prod1” „valoare” nu a fost declarată
în module.vpn-ha-gateway.


Eroare: referire la resursa nedeclarată

  pe .terraform\modules\vpn-ha-gateway\main.tf linia 37, în resursa „google_compute_router” „router1”:
  37: description = advertised_ip_ranges_prod1.value["desc"]

O resursă gestionată „advertised_ip_ranges_prod1” „valoare” nu a fost declarată
în module.vpn-ha-gateway.```

Puncte:1
drapel bw

Deci problema (cred) este modul în care faceți referire la iterația curentă a elementului dinamic din interiorul pentru fiecare "bloc". În general, numele „variabilei” pe care o utilizați pentru a face referire la valoarea curentă a iteratorului în pentru fiecare block este de fapt numele etichetei dinamice în sine. Ca urmare, cred că trebuie să înlocuiți asta:

resursă „google_compute_router” „router1” {
  nume = "${var.alias}-prod1-ha-vpn-cloud-router-1"
  proiect = var.nume_proiect
  network = var.network1
  regiune = var.region1
  bgp {
    asn = var.asn
    advertise_mode = „PERSONALIZAT”
    dinamic „advertised_ip_ranges” {
      for_each = var.advertised_ip_ranges_prod1
      continut {
        interval = advertised_ip_ranges_prod1.value["cidr"]
        description = advertised_ip_ranges_prod1.value["desc"]
      }
    }
  }
}

Cu asta:

resursă „google_compute_router” „router1” {
  nume = "${var.alias}-prod1-ha-vpn-cloud-router-1"
  proiect = var.nume_proiect
  network = var.network1
  regiune = var.region1
  bgp {
    asn = var.asn
    advertise_mode = „PERSONALIZAT”
    dinamic „advertised_ip_ranges” {
      for_each = var.advertised_ip_ranges_prod1
      continut {
        interval = advertised_ip_ranges.value["cidr"]
        description = advertised_ip_ranges.value["desc"]
      }
    }
  }
}

de exemplu. s/advertised_ip_ranges_prod1/advertised_ip_ranges/

Pentru referință, consultați primul exemplu pe documentația lor despre aceasta, care este următoarea:

resursă „aws_elastic_beanstalk_environment” „tfenvtest” {
  nume = "nume-test-tf"
  application = "${aws_elastic_beanstalk_application.tftest.name}"
  solution_stack_name = "Amazon Linux 2018.03 v2.11.4 pe 64 de biți care rulează Go 1.12.6"

  „setare” dinamică {
    for_each = var.settings
    continut {
      namespace = setting.value["namespace"]
      nume = setting.value["nume"]
      valoare = setting.value["valoare"]
    }
  }
}

Rețineți că folosesc setare.valoare, chiar dacă numele variabilei este setări. Practic te confrunți cu aceeași diferență, destul de confuză.

djsmiley2kStaysInside avatar
drapel ua
Răspuns excelent, mulțumesc. Lucrurile mici ca acestea din terraform sunt cele care mă împiedică cu adevărat!.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.