terraform 模块来源 github url。哪种格式?

问题描述 投票:0回答:2

我看到一个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 模块部分中的文档。但它没有描述它。

github web url terraform
2个回答
2
投票

有关模块内部有效内容的完整文档

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 通过以下方式理解此源地址字符串:

  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 将按照与解码根模块类似的方式加载和解码该文件。


0
投票

试试这个

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"
© www.soinside.com 2019 - 2024. All rights reserved.