Вложенный цикл, основанный на ответе json в Terraform для нескольких целевых ресурсов

#terraform #resources

Вопрос:

Массив:

 regions = [  {name: "region1"},   {name: "region2"},   {name: "region3"},   {name: "region4"},   {name: "region5"},   {name: "region6"}]  

Json:

 {  "region1" : ["cluster1"],  "region2" : [],  "region3" : ["cluster1"],  "region4" : ["cluster1","cluster2"] }   resource "type" "name" {  count = length(regionLength)  name = "region-name/cluster-name" }  

Мне нужен ресурс, созданный с таким выводом имени, как этот

  • регион 1/кластер 1
  • регион2
  • регион3/кластер1
  • регион4/кластер1
  • регион4/кластер2

Можем ли мы достичь и этого: Финал = []

 For r , cs in arr:   for oc in regions:  if r == oc.name:  for c in cs:   oc[‘cluster’] = r-c  Final.push(oc)  

Заранее спасибо.

Комментарии:

1. Я также заметил, что почти на все ваши вопросы есть ответы, но ни один из них не принят. Принятие хороших ответов-это не только хорошая практика, но и уменьшает количество дубликатов и увеличивает шансы на то, что на ваши вопросы действительно будут даны ответы.

2. Каждый вопрос уникален. Это просто перспектива. Я последовал остальной части решения с ответом, и хотя я не знаю, как его принять. Однако несколько ответов были действительно отличными, и они сработали для меня.

3. Я бы предложил пересмотреть эти ответы и принять их. Для этого вы нажимаете кнопку «галочка» под кнопками голосования вверх/вниз. Также ваш текущий вопрос не ясен.

4. Хорошо. Понял

Ответ №1:

Вы можете добиться этого следующим образом:

  variable "regions" {  default = {  "region1" : ["cluster1"],  "region2" : [],  "region3" : ["cluster1"],  "region4" : ["cluster1","cluster2"]  } }   locals {  region_list = flatten([for region, clusters in var.regions:  [ for cluster in coalescelist(clusters, [""]):  "${region}/${cluster}"   ]  ]) }   

что дает:

 region_list = [  "region1/cluster1",  "region2/",  "region3/cluster1",  "region4/cluster1",  "region4/cluster2", ]  

Комментарии:

1. Это сработало для меня. Спасибо

2. Еще одно дополнение к вышеупомянутому вопросу @Marcin: Я добавляю вопрос. дайте мне знать вашу идею

3. @Himani, пожалуйста, сделайте новый вопрос для нового выпуска. Также, пожалуйста, примите ответ, если это помогло.

4. Я уже согласился.

5. @Химани Спасибо. Но чтобы принять, вам нужно нажать кнопку «галочка» под кнопками голосования вверх/вниз в ответе.