Источники модуля terraform URL-адрес github. какой формат?

Я видел код терраформирования, который писался как

source = "github.com/brikis98/terraform-up-and-running-code//code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster?ref=v0.1.0"

Но когда я получаю доступ к этому URL-адресу в Chrome, он не может получить доступ к своему ресурсу.

Так. Интересно, что этот URL соответствует формату. Есть ли какое-то правило на этот счет?

двойная косая черта (//) подозрительна... для меня.

Я уже просмотрел документ в разделе модуля terraform. Но Он не описывает об этом.

developer.hashicorp.com/terraform/language/modules/… «Специальный синтаксис с двойной косой чертой интерпретируется Terraform, чтобы указать, что оставшийся путь после этой точки является подкаталогом внутри пакета»
luk2302 09.01.2023 10:15
Редкие достижения на Github ✨
Редкие достижения на Github ✨
Редкая коллекция доступна в профиле на GitHub ✨
0
1
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте с этим

source = "git::https://github.com/brikis98/terraform-up-and-running-code.git//code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster?ref=v0.1.0"
Ответ принят как подходящий

Полная документация о том, что допустимо внутри аргумента модуля source, находится в Источники модуля.

Пример, который вы показали в своем вопросе, включает части, соответствующие двум разным разделам на этой странице:

  • github.com/brikis98/terraform-up-and-running-code — это одна из схем исходного адреса, описанная в разделе GitHub.

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

    git::https://github.com/brikis98/terraform-up-and-running-code

    Эта более длинная версия включает префикс git::, который говорит Terraform, что он должен рассматривать следующее как URL-адрес Git, и Terraform также автоматически добавляет префикс https://, чтобы сделать это URL-адресом HTTPS.

    Этот префикс git:: на самом деле является синтаксисом для универсальных репозиториев Git , поэтому вы можете видеть, что Terraform внутренне преобразует этот URL-адрес, специфичный для GitHub, в общий URL-адрес Git. Суффикс ?ref=v0.1.0 также является частью общей схемы исходных адресов Git, как описано в разделе Выбор версии.

    Когда вы запустите terraform init, Terraform сообщит каноническую версию исходного адреса как часть своего отчета об установке этого пакета модуля.

  • //code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster — необязательная спецификация подкаталога .

    «Пакет модулей» — это общее слово для пакета файлов, который Terraform может загрузить и который содержит один или несколько модулей. Репозиторий Git — это один из примеров пакета модулей в том, что касается Terraform.

    По умолчанию Terraform ожидает найти исходный код модуля в корневом каталоге пакета модуля, но если исходный адрес включает часть, представленную маркером //, Terraform воспринимает это как подкаталог внутри пакета, где он должен найти конкретный модуль, в котором вы находились. пытаюсь вызвать. Этот конкретный репозиторий GitHub содержит множество различных модулей Terraform, принадлежащих к разным частям книги, которую он поддерживает, поэтому ссылки на этот репозиторий всегда будут иметь часть подкаталога.

В целом, Terraform понимает эту строку исходного адреса следующим образом:

  1. Разделение его на части «пакет» и «подкаталог»:

    • Пакет: github.com/brikis98/terraform-up-and-running-code?ref=v0.1.0
    • Подкаталог: code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster
  2. Заметив, что часть пакета использует сокращение github.com и поэтому переписывает его в каноническую форму:

    • Пакет git::https://github.com/brikis98/terraform-up-and-running-code?ref=v0.1.0

    (Это адрес пакета, который terraform init сообщит при установке.)

  3. Теперь, когда пакет включает префикс метода установки git::, Terraform знает, что он должен получить пакет модуля, выполнив команду, похожую на следующую:

    • git clone https://github.com/brikis98/terraform-up-and-running-code
    • git checkout v0.1.0

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

  4. Если загрузка прошла успешно, у Terraform теперь есть копия пакета в каталоге, похожем на .terraform/modules/example.

    Затем он присоединится к части подкаталога, чтобы найти окончательное местоположение модуля в локальном кеше:

    • .terraform/modules/example/code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster

Этот последний каталог должен содержать как минимум один файл .tf, описывающий содержимое модуля, который Terraform затем загрузит и декодирует аналогично тому, как он декодирует корневой модуль.

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