Я ищу варианты указания многоразовых модулей 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, он выдаст ошибку: «значение должно быть известно».
Есть идеи, как этого можно достичь?
«Если я попытаюсь добавить его как переменную gitlab, выдаст ошибку: «значение должно быть известно». Тогда покажите, что вы пытаетесь это сделать в вопросе. Вам придется каким-то образом заменить эту переменную в коде Terraform значением переменной перед запуском Terraform. Terraform не будет автоматически использовать переменные среды GitLab.
@MarkB, кажется, есть способ передать gitlab var в TF, как показано в этой ссылке, но похоже, что он не будет работать для «источника». Проблема, похоже, в том, что «источник» не принимает переменные... независимо от того, из gitlab или нет. stackoverflow.com/questions/64563458/…
То, что вы связали, — это просто базовая поддержка переменных Terraform, она не специфична для GitLab. Terraform вообще не поддерживает переменные в модуле source
. Таким образом, вам придется создать какой-то шаблон файла Terraform, чтобы создать новый файл со значением, прежде чем фактически запускать Terraform.
@HelderSepulveda, если бы вы могли предложить, как использовать переменные (даже переменные TF) в «исходном коде», это тоже было бы хорошо, поскольку мне есть с чем работать.
@MarkB, правда, проблема не только в gitlab. Я мог бы успешно «вывести» значение переменной env gitlab, используя код TF, но мог сделать это только вне «источника». Я вижу, что вы подтверждаете, что TF не допускает использования переменных в Source. Спасибо за ваш вклад. Проблема, которую я пытаюсь решить, заключается в том, чтобы избежать наличия файла в репозитории gitlab с видимым значением токена. Ваше здоровье.
переменные в исходном коде сегодня просто не разрешены... github.com/hashicorp/terraform/issues/1439
У GitLab должен быть способ создавать частные модули TF без необходимости жестко запрограммировать пользователя и токен в URL-адресе. Свяжитесь с ними для получения дополнительной помощи... возможно, начните здесь: docs.gitlab.com/ee/user/packages/terraform_module_registry
это выглядит близко: 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
Привет, Хелдер, спасибо за подсказки по реестру TF. Хотя я решил свою проблему, как упомянуто в комментарии ниже, я записываю это, чтобы изучить ее в ближайшие недели. Ваше здоровье!
Аргумент 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.
Это не проблема
terraform
илиterraform-provider-aws
... лучше всего обратиться за помощью в gitlab.