首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地形模块需要required_providers吗?

地形模块需要required_providers吗?
EN

Stack Overflow用户
提问于 2021-07-01 19:40:37
回答 2查看 9.7K关注 0票数 12

我对我在terraform文档中读到的内容感到有点困惑。下面是它对模块的说明:

https://www.terraform.io/docs/language/modules/index.html

模块是多个资源一起使用的容器。模块由保存在目录中的.tf和/或.tf.json文件集合组成。

以下是它对提供者的看法:https://www.terraform.io/docs/language/providers/requirements.html

要求提供者 每个Terraform模块必须声明它需要的提供者,以便Terraform可以安装和使用它们。提供程序需求在required_providers块中声明。 提供程序需求由本地名称、源位置和版本约束组成: terraform { required_providers { mycloud ={~>1.0}

我对此感到困惑,因为我从未在我的任何模块中指定过required_providers,尽管我使用的是提供程序,而且它说我必须这样做。直到今天我才知道文件上说了这句话。

那么,我是误解了文档,还是文档错了?我的每个模块是否需要required_providers?我的地形配置在没有它们的情况下绝对有效,所以它们是默认的吗?如果是,如何和地点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-06 21:08:11

为了与早期版本的Terraform向后兼容,Terraformv0.13和以后将在required_providers中未声明的提供程序短名称的任何使用视为对hashicorp命名空间中提供程序的需求的隐式声明。

例如,我们可以考虑这样的资源:

代码语言:javascript
复制
resource "aws_instance" "example" {
  # ...
}

如果您还没有声明aws指的是什么提供者,那么Terraform就会假设您的意思是编写这样的东西:

代码语言:javascript
复制
terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
    }
  }
}

这种行为主要是为了允许针对(以前唯一的自动安装提供程序)编写的现有模块继续工作,而不进行任何修改。如果您愿意,可以依赖于这种向后兼容性行为,但意图(反映在文档中)是,所有现代Terraform模块都应该明确说明它们使用的是哪些特定的提供者,这样,随着时间的推移,由于有更多的提供者属于其他名称空间,模块的读者不需要知道这个特殊的向后兼容性规则才能理解它的含义。

Terraformv0.13中包含的terraform 0.13upgrade命令将自动为模块使用的每个提供者生成一个合适的源地址,方法是引用一个表,该表将Terraformv0.12和更早版本所理解的提供程序名称映射到Terraformv0.13及更高版本所期望的完全限定的提供者源地址。只有由HashiCorp维护的地址(而不是由第三方维护,但以前由HashiCorp发布)位于hashicorp命名空间中,因此使用该工具将确保您将指定对应于Terraformv0.12为同一配置安装的提供程序的地址。

票数 20
EN

Stack Overflow用户

发布于 2021-07-02 00:59:14

子模块不需要required_providers,因为如果需要,它们将从父模块继承。来自文档

如果子模块不声明任何配置别名,则提供程序参数是可选的。如果省略它,则子模块从其父模块继承所有默认提供程序配置。(默认提供程序配置是不使用别名参数的配置。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68216074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档