Terraform сравнивает ключи двух разных карт и копирует значение

#terraform #terraform-provider-aws

#terraform #terraform-поставщик-aws

Вопрос:

У меня есть модуль, который выводит карту, module.platformusers.paths , вот так:

 {
    "user1_test" = "user1_value_path"
    "user2_test" = "user2_value_path"
    "user3_test" = "user3_value_path"
}
  

Я должен выполнить итерацию по local.musyers карте, взять ключ и сравнить с module.platformusers.paths ключом, и если ключ содержится во второй карте, тогда я должен скопировать значение

 {
    "user1" = "Allen"
    "user2" = "john"
    "user3" = "Rose"
}
  

Я хочу иметь что-то подобное, когда предполагаю, что они индивидуальны

 resource "aws_ssm_parameter" "userspath" {
  name  = "Allen"
  type  = "String"
  value = "user1_value_path"
}

resource "aws_ssm_parameter" "userspath" {
  name  = "john"
  type  = "String"
  value = "user2_value_path"
}

resource "aws_ssm_parameter" "userspath" {
  name  = "Rose"
  type  = "String"
  value = "user3_value_path"
}
  

Я пытаюсь, как показано здесь, но это не работает, поскольку мои ключи не совпадают:

 resource "aws_ssm_parameter" "userspath" {
  for_each =  module.platformusers.paths
  name  = ${each.value}
  type  = "String"
  value = lookup( module.platformusers.paths,  ${each.key}, "")
}
  

Как применить contains здесь?

Ответ №1:

Могут быть лучшие способы сделать это, но вот один быстрый способ, который я мог придумать.. Если разница в ключах будет просто «_test», как вы показали выше, на самом деле это может быть просто. Вы можете использовать функцию форматирования, чтобы добавить «_test» и выполнить поиск.

В вашем примере кода вы не зацикливались на local.musyers.. Примечание: чувствителен к регистру. Вы можете использовать функцию UPPER, чтобы сделать ее нечувствительной.

 resource "aws_ssm_parameter" "userspath" {
  for_each =  local.musyers
  name  = ${each.value}
  type  = "String"
  value = lookup(module.platformusers.paths, format("%s_test", each.key) , "missing")
}