Как передать динамические значения в «источник» модуля

Я ищу варианты указания многоразовых модулей aws, которые хранятся в отдельном проекте в gitlab. Например, если есть общий компонент ec2, я вызову его в своем модуле и передам любые конкретные переменные и т. д.,

module "terraform_tags" {
  source = "git::https://gitlab.my.company.com/aws-ec2.git"
}

Этот подход работает, если я явно добавляю имя пользователя и токен в источник:

i.e., source = "git::https://username:<tokenvalue>@gitlab.my.company.com/aws-ec2.git"

Но мне бы хотелось, чтобы код этого модуля был написан таким образом, чтобы значение токена передавалось как переменная, а не упоминалось явно в самом коде. Если я попытаюсь добавить его как переменную gitlab, он выдаст ошибку: «значение должно быть известно».

Есть идеи, как этого можно достичь?

Это не проблема terraform или terraform-provider-aws... лучше всего обратиться за помощью в gitlab.

Helder Sepulveda 03.05.2024 14:19

«Если я попытаюсь добавить его как переменную gitlab, выдаст ошибку: «значение должно быть известно». Тогда покажите, что вы пытаетесь это сделать в вопросе. Вам придется каким-то образом заменить эту переменную в коде Terraform значением переменной перед запуском Terraform. Terraform не будет автоматически использовать переменные среды GitLab.

Mark B 03.05.2024 15:07

@MarkB, кажется, есть способ передать gitlab var в TF, как показано в этой ссылке, но похоже, что он не будет работать для «источника». Проблема, похоже, в том, что «источник» не принимает переменные... независимо от того, из gitlab или нет. stackoverflow.com/questions/64563458/…

mgn 03.05.2024 15:50

То, что вы связали, — это просто базовая поддержка переменных Terraform, она не специфична для GitLab. Terraform вообще не поддерживает переменные в модуле source. Таким образом, вам придется создать какой-то шаблон файла Terraform, чтобы создать новый файл со значением, прежде чем фактически запускать Terraform.

Mark B 03.05.2024 15:52

@HelderSepulveda, если бы вы могли предложить, как использовать переменные (даже переменные TF) в «исходном коде», это тоже было бы хорошо, поскольку мне есть с чем работать.

mgn 03.05.2024 15:54

@MarkB, правда, проблема не только в gitlab. Я мог бы успешно «вывести» значение переменной env gitlab, используя код TF, но мог сделать это только вне «источника». Я вижу, что вы подтверждаете, что TF не допускает использования переменных в Source. Спасибо за ваш вклад. Проблема, которую я пытаюсь решить, заключается в том, чтобы избежать наличия файла в репозитории gitlab с видимым значением токена. Ваше здоровье.

mgn 03.05.2024 16:10

переменные в исходном коде сегодня просто не разрешены... github.com/hashicorp/terraform/issues/1439

Helder Sepulveda 03.05.2024 18:20

У GitLab должен быть способ создавать частные модули TF без необходимости жестко запрограммировать пользователя и токен в URL-адресе. Свяжитесь с ними для получения дополнительной помощи... возможно, начните здесь: docs.gitlab.com/ee/user/packages/terraform_module_registry

Helder Sepulveda 03.05.2024 18:23

это выглядит близко: docs.gitlab.com/ee/user/packages/terraform_module_registry/…You can provide authentication tokens (job tokens, personal access tokens, or deploy tokens) for terraform in your ~/.terraformrc or %APPDATA%/terraform.rc file

Helder Sepulveda 03.05.2024 18:27

Привет, Хелдер, спасибо за подсказки по реестру TF. Хотя я решил свою проблему, как упомянуто в комментарии ниже, я записываю это, чтобы изучить ее в ближайшие недели. Ваше здоровье!

mgn 06.05.2024 16:18
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
10
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Аргумент source в блоке module указывает только расположение модуля и не является подходящим местом для настройки учетных данных, используемых для его получения.

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

Если вы хотите просто статически настроить учетные данные, а не получать их динамически из другого места, вы можете настроить Git для этого.

Во-первых, вы можете указать Git, какое имя пользователя использовать для этого репозитория, отредактировав файл конфигурации Git, который обычно находится по адресу ~/.gitconfig в операционной системе Unix. Следующая запись настраивает имя пользователя, которое будет использоваться на вашем сервере GitLab:

[credential "https://gitlab.my.company.com"]
    username = example

Если вы не используете отдельное хранилище для хранения пароля, Git хранит пароли в другом отдельном файле, ~/.git-credentials.

В этом файле учетных данных хранится пароль, который можно использовать для каждой пары имени пользователя и URL-адреса. Если бы ваше имя пользователя было «примерным» (как указано выше), а ваш пароль — «секретным», то вы бы поместили в этот файл следующую запись:

https://example:[email protected]

С помощью этой записи файла конфигурации и записи учетных данных Git должен отправить необходимые учетные данные на ваш сервер Git. Terraform устанавливает модули из Git, запуская обычную команду git clone, которая затем использует эти настройки.

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

Привет @Martin, я установил конфигурацию git для своей виртуальной машины разработчика, но не для запуска gitlab. Теперь я использовал «git config credential.helper store» как часть конвейера для хранения учетных данных (значение токена, переданное через переменные CICD) в .git-credentials на бегуне. Для большей безопасности я добавил шаг в конце конвейера для удаления .git-учетных данных. Таким образом, значение токена никогда не присутствует ни в одном файле в репозитории и живет на бегуне всего несколько минут. Спасибо за указатель на git-credentials.

mgn 06.05.2024 16:11

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