我看到一个terraform代码,写为
源 =“github.com/brikis98/terraform-up-and-running-code//code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster?ref=v0.1.0”
但是,当我在 Chrome 中访问此 URL 时,它无法访问其资源。
所以。我想知道这个 URL 遵循什么格式。有什么规定吗?
双斜杠(//)对我来说是可疑的。
我已经查看了 terraform 模块部分中的文档。但它没有描述它。
有关模块内部有效内容的完整文档
source
参数是模块源。
您在问题中显示的示例包括与该页面上两个不同部分相对应的部分:
github.com/brikis98/terraform-up-and-running-code
是GitHub下描述的源地址方案之一。
由于 GitHub 是常用的版本控制主机,Terraform 对它有特殊支持,并且知道任何 GitHub 存储库都需要使用 Git 进行克隆,因此 Terraform 可以在内部自动将该速记重写为以下规范形式:
git::https://github.com/brikis98/terraform-up-and-running-code
较长的版本包含
git::
前缀,它告诉 Terraform 应该将以下内容视为 Git URL,并且 Terraform 还会自动添加 https://
前缀以使其成为 HTTPS URL。
这个
git::
前缀实际上是 Generic Git Repositories 的语法,因此您可以看到 Terraform 正在内部将此 GitHub 特定 URL 转换为通用 Git URL。 ?ref=v0.1.0
后缀也是通用 Git 源地址方案的一部分,如选择修订版中所述。
当您运行
terraform init
Terraform 将报告源地址的规范版本,作为其正在安装此模块包的报告的一部分。
//code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster
是可选的子目录规范。
“模块包”是 Terraform 可以下载的文件包的通用词,其中包含一个或多个模块。就 Terraform 而言,Git 存储库是模块包的一个示例。
默认情况下,Terraform 希望在模块包的根目录中找到模块源代码,但如果源地址包含由
//
标记引入的部分,则 Terraform 会将其作为包内的子目录,应在其中找到特定的模块源代码。您试图调用的模块。这个特定的 GitHub 存储库包含许多不同的 Terraform 模块,属于它所支持的书籍的不同部分,因此对此存储库的引用将始终有一个子目录部分。
总体而言,Terraform 通过以下方式理解此源地址字符串:
将其拆分为“包”和“子目录”部分:
github.com/brikis98/terraform-up-and-running-code?ref=v0.1.0
code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster
注意到包部分正在使用
github.com
简写,因此将其重写为规范形式:
git::https://github.com/brikis98/terraform-up-and-running-code?ref=v0.1.0
(这是
terraform init
安装时会报告的包地址。)
现在包包含安装方法前缀
git::
,Terraform 知道它应该通过运行如下命令来获取模块包:
git clone https://github.com/brikis98/terraform-up-and-running-code
git checkout v0.1.0
Terraform 始终将外部模块包下载到本地系统上
.terraform
目录下的隐藏缓存目录中。该目录的确切结构是一个实现细节,可能会在不同版本的 Terraform 之间发生变化,但在当前的 Terraform 中,子目录以您的 module
块中的标签命名。
如果下载成功,那么 Terraform 现在会在类似
.terraform/modules/example
的目录中拥有该包的副本。
然后它会加入子目录部分以找到该模块在本地缓存中的最终位置:
.terraform/modules/example/code/terraform/04-terraform-module/module-example/modules/services/webserver-cluster
最终目录必须包含至少一个描述模块内容的
.tf
文件,然后 Terraform 将按照与解码根模块类似的方式加载和解码该文件。
试试这个
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"