Фильтрация списка во время построения

#terraform

#терраформирование

Вопрос:

Я пытаюсь отфильтровать список местоположений Azure, чтобы выбрать основные; основное местоположение в этом смысле является первым местоположением пары регионов, которая находится в списке, например, задан список [ 'westeurope', 'northeurope' ] , которым должен быть результирующий список [ 'westeurope' ] .

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

Единственный хак, который у меня есть, — это что-то вроде этого…

 locals {  pairs = {  # Europe  northeurope = "westeurope"  westeurope = "northeurope"   # UK  uksouth = "ukwest"  ukwest = "uksouth"    # Plus lots more ignored for brevity  }   # Just filter even indicies  primaries = [ for x, index in var.locations : x if index / 2 = 0 ] }  

Но для этого требуется, чтобы элементы находились в правильном порядке, т. е. работали [ 'westeurope', 'northeurope', 'uksouth', 'ukwest' ] бы, но давали неверный ответ для [ 'westeurope', 'uksouth', 'northeurope', 'ukwest' ]

Вот таблица, показывающая различные местоположения и ожидаемые результаты для различных сценариев…

вар.местоположения первичный
[ «вестеуроп» ] [ «вестеуроп» ]
[ «северная Европа»] [ «северная Европа»]
[ «западная Европа», «северная Европа»] [ «вестеуроп» ]
[ «северная Европа», «западная Европа»] [ «северная Европа»]
[ «западная Европа», «уксаут», «северная Европа»] [ «вестеуроп», «уксаут» ]
[ «западная Европа», «северная Европа», «уксаут» ] [ «вестеуроп», «уксаут» ]

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

1. Можете ли вы показать, что такое var.locations … из вашего вопроса все, что вам нужно, это чтобы первый элемент в массиве var.locations[0] делал именно это (при условии, что var.locations является массивом)

2. возможно, добавьте несколько разных входных данных и ожидаемый результат