Многострочный код terraform base64encode

У меня есть следующая многострочная переменная в Terraform для PRIVATE_KEY, закодированная с помощью функции base64encode.

oci_prv_key = <<EOT
-----BEGIN PRIVATE KEY-----
xxxxxxxxx
xxxxxxxx
xxxxxxxxx
xxxxxxxxx
-----END PRIVATE KEY-----
EOT

когда я декодирую переменную с помощью функции base64decode

маркер heredoc <<EOT и EOT включен в значение, как я могу исправить это поведение?

предполагается или я предполагаю, что значение должно иметь только закрытый ключ без маркеров Heredoc и начала и конца или строки

Под переменной вы подразумеваете локальную переменную?

Rui Jarimba 11.07.2024 00:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
216
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С вашим кодом все в порядке — переменная была задана как строка heredoc и будет отображаться так в плане, если вы создадите выходную переменную с ее значением. Именно так Terraform представляет или отображает многострочные строки.

Пример

Рассмотрим следующий модуль, который создает текстовый файл на основе локальной переменной oci_prv_key:

locals {
  oci_prv_key = <<EOT
-----BEGIN PRIVATE KEY-----
xxxxxxxxx
xxxxxxxx
xxxxxxxxx
xxxxxxxxx
-----END PRIVATE KEY-----
EOT
}

resource "local_file" "key_file" {
  content  = local.oci_prv_key
  filename = "${path.module}/key.txt"
}

output "key" {
  value = local.oci_prv_key
}

Запуск terraform plan по-прежнему показывает <<-EOT:

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # local_file.key_file will be created
  + resource "local_file" "key_file" {
      + content              = <<-EOT
            -----BEGIN PRIVATE KEY-----
            xxxxxxxxx
            xxxxxxxx
            xxxxxxxxx
            xxxxxxxxx
            -----END PRIVATE KEY-----
        EOT
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./key.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + key = <<-EOT
        -----BEGIN PRIVATE KEY-----
        xxxxxxxxx
        xxxxxxxx
        xxxxxxxxx
        xxxxxxxxx
        -----END PRIVATE KEY-----
    EOT

Но при запуске terraform apply файл key.txt будет сгенерирован с соответствующим содержимым, то есть без <<-EOT:

-----BEGIN PRIVATE KEY-----
xxxxxxxxx
xxxxxxxx
xxxxxxxxx
xxxxxxxxx
-----END PRIVATE KEY-----

Альтернатива строкам Heredoc

Честно говоря, я никогда не использую строки heredoc, так как они делают код более уродливым и трудным для понимания — чем больше строка, тем хуже она становится.

Вместо этого я предпочитаю хранить длинные и сложные строки, такие как содержимое json или XML, в файлах и использовать функцию file для чтения его содержимого. Или, в качестве альтернативы, используйте функцию templatefile для визуализации файла шаблона с предоставленными переменными.

Рассмотрим следующий модуль, который считывает закрытый ключ из текстового файла iac/files/key.txt:

main.tf

locals {
  private_key = file("${path.module}/files/key.txt")
}

output "private_key" {
  value = local.private_key
}

файлы/key.txt

-----BEGIN PRIVATE KEY-----
xxxxxxxxx
xxxxxxxx
xxxxxxxxx
xxxxxxxxx
-----END PRIVATE KEY-----

При запуске terraform plan в выходной переменной отображается <<-EOT, поскольку это многострочная строка:

Changes to Outputs:
  + private_key = <<-EOT
        -----BEGIN PRIVATE KEY-----
        xxxxxxxxx
        xxxxxxxx
        xxxxxxxxx
        xxxxxxxxx
        -----END PRIVATE KEY-----
    EOT

спасибо за ваш подробный ответ и хороший совет использовать содержимое файла вместо многострочных переменных. Я мог бы использовать функцию basefile64 для одновременного чтения содержимого и кодирования, а затем декодирования с помощью base64decode

Ahmed Al-Haffar 14.07.2024 18:01

Другие вопросы по теме