Terraform - Как изменить ключи карты? - PullRequest
1 голос
/ 05 августа 2020

Можно ли в Terraform 0.12.xx изменить ключи на карте вместо их соответствующих значений? Предположим, что у нас есть следующее в определении модуля:

locals {
    task_logging = [
    for k, v in var.task_logging_options : {
      name = trimprefix(k,"TASK_LOGGING_")
      value = v
    }
  ]
}

Однако trimprefix здесь применяется только к значению.

Затем внизу я создаю определение задачи для ECS service:

{...}
"logConfiguration": {
        "logDriver": "awsfirelens",
        "secretOptions": [],
        "options": ${jsonencode(local.task_logging_options)}
    },
{...}

И, наконец, при создании экземпляра модуля я передаю task_logging_options следующим образом:

task_logging_options = {
    TASK_LOGGING_Name = "es"
    TASK_LOGGING_Host = "some.host"
  }

Где локальная функция должна удалить префикс TASK_LOGGING_ для создания JSON объект для конфигурации Fluentbit.

Конечным результатом должен быть объект, аналогичный фрагменту из плана терраформирования:

~ logConfiguration = {
                        logDriver     = "awsfirelens"
                      ~ options       = {
                          - Buffer_Size       = "False" -> null
                          - HTTP_Passwd       = "READACTED" -> null
                          - HTTP_User         = "READACTED" -> null
                          - Host              = "READACTEDd" -> null
                          - Index             = "READACTED" -> null
                          - Name              = "es" -> null
                          - Port              = "READACTED" -> null
                          + TASK_LOGGING_Host = "some.host"
                          + TASK_LOGGING_Name = "es"
                          - Tls               = "On" -> null
                          - Trace_Output      = "On" -> null
                        }
                        secretOptions = []
                    }
   

1 Ответ

0 голосов
/ 05 августа 2020

Не совсем понимаю, чего вы хотите достичь, но вы также можете использовать trimprefix(k,"TASK_LOGGING_") в качестве ключа.

Например:


locals { 
  task_logging2 = [
    for k, v in var.task_logging_options : {
        trimprefix(k,"TASK_LOGGING_") = v
      }
    ]  
}

приведет к тому, что local.task_logging2 будет :

[
  {
    "Host" = "some.host"
  },
  {
    "Name" = "es"
  },
]

Обновить

Если требуется объект, можно использовать следующее:

locals {
  
  task_logging2 = {
    for k, v in var.task_logging_options : 
        trimprefix(k,"TASK_LOGGING_") => v
      }   
}

, в результате чего local.task_logging2 будет:

{
  "Host" = "some.host"
  "Name" = "es"
}
...