मुझे उनके सम्मानित आईपी के साथ कई डीएनएस बनाने की जरूरत है। मुझे पहले आईपी को पहले डीएनएस और दूसरे से दूसरे डीएनएस को असाइन करने की आवश्यकता है। dns1 - 10.1.20.70 और dns2-10.1.20.40 जैसा कुछ। लेकिन दोनों IP प्राप्त करना DNS (dns1 और dns2) दोनों के लिए असाइन किया जा रहा है। कोई सुझाव?

कोड:

resource "aws_route53_record" "onprem_api_record" {
  for_each = toset(local.vm_fqdn)
  zone_id = data.aws_route53_zone.dns_zone.zone_id
  name    = each.value
  type    = "A"
  records = var.api_ips[terraform.workspace]
  ttl     = "300"
}

locals {
  vm_fqdn = flatten(["dns1-${terraform.workspace}.${local.domain}", "dns2-${terraform.workspace}.${local.domain}"] )
}

variable "api_ips" {
  type    = map(list(string))
  default = {
    "dev"    = [ "10.1.20.70", "10.1.20.140" ]
    "qa"     = [ "10.1.22.180", "10.1.22.150" ]
    "test"   = [ "10.1.23.190", "10.1.23.160" ]
  }
}

उत्पादन

+ resource "aws_route53_record" "onprem_api_record" {
    + allow_overwrite = (known after apply)
    + fqdn            = (known after apply)
    + id              = (known after apply)
    + name            = "dns1.dev.ciscodcloud.com"
    + records         = [
        + "10.1.20.40",
        + "10.1.20.70",
      ]
    + ttl             = 300
    + type            = "A"
    + zone_id         = "Z30HW9VL6PYDXQ"
  }

aws_route53_record.onprem_api_record["dna2.dev.cisco.com"] will be created
+ resource "aws_route53_record" "onprem_api_record" {
    + allow_overwrite = (known after apply)
    + fqdn            = (known after apply)
    + id              = (known after apply)
    + name            = "dns2.dev.cisco.com"
    + records         = [
        + "10.1.20.40",
        + "10.1.20.70",
      ]
    + ttl             = 300
    + type            = "A"
    + zone_id         = "Z30HW9VL6PYDXQ"
  }

Plan: 2 to add, 0 to change, 1 to destroy.
1
Gowthamakanthan Gopal 29 अक्टूबर 2021, 09:28

2 जवाब

सबसे बढ़िया उत्तर

आप zipmap का उपयोग करना चाह सकते हैं। यहाँ एक संक्षिप्त उदाहरण है जो for_each में for के साथ इसका उपयोग दिखा रहा है जैसा कि आपके मामले में किया जा सकता है।

resource "aws_route53_record" "onprem_api_record" {
  for_each = { for fqdn, ip in zipmap(local.vm_fqdn, local.ips["dev"]) : fqdn => ip }

  zone_id = "x"
  name    = each.key
  type    = "A"
  records = [each.value]
  ttl     = "300"
}

locals {
  ips = {
    "dev"  = ["10.1.20.70", "10.1.20.140"]
    "qa"   = ["10.1.22.180", "10.1.22.150"]
    "test" = ["10.1.23.190", "10.1.23.160"]
  }
  vm_fqdn = ["dns1-dev.domain", "dns2-dev.domain"]
}

और योजना इस तरह दिखती है:

  # aws_route53_record.onprem_api_record["dns1-dev.domain"] will be created
  + resource "aws_route53_record" "onprem_api_record" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = "dns1-dev.domain"
      + records         = [
          + "10.1.20.70",
        ]
      + ttl             = 300
      + type            = "A"
      + zone_id         = "x"
    }

  # aws_route53_record.onprem_api_record["dns2-dev.domain"] will be created
  + resource "aws_route53_record" "onprem_api_record" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = "dns2-dev.domain"
      + records         = [
          + "10.1.20.140",
        ]
      + ttl             = 300
      + type            = "A"
      + zone_id         = "x"
    }

Plan: 2 to add, 0 to change, 0 to destroy.
1
theherk 29 अक्टूबर 2021, 10:51
बहुत बहुत धन्यवाद, यह काम कर गया!
 – 
Gowthamakanthan Gopal
29 अक्टूबर 2021, 12:40

आप इसे count के साथ इस प्रकार कर सकते हैं:

resource "aws_route53_record" "onprem_api_record" {
  count   = length(local.vm_fqdn)
  zone_id = data.aws_route53_zone.dns_zone.zone_id
  name    = local.vm_fqdn[count.index]
  type    = "A"
  records = [var.api_ips[terraform.workspace][count.index]]
  ttl     = "300"
}
1
Marcin 29 अक्टूबर 2021, 10:00
धन्यवाद। यह अपेक्षा के अनुरूप काम कर रहा है। वैसे भी, हम for_each के साथ जाना पसंद करते हैं। टी
 – 
Gowthamakanthan Gopal
29 अक्टूबर 2021, 12:41