- OpenTofu 内部结构
- 提供程序元数据
提供程序元数据
在某些情况下,提供程序可以通过一个接口来接收模块传递给它的与模块中的资源无关的信息,但这些信息是在每个模块的基础上进行作用域的。
提供程序元数据允许提供程序声明其期望的元数据字段,然后各个模块可以独立于任何提供程序配置来填充这些字段。虽然提供程序配置通常在模块之间共享,但提供程序元数据始终是特定于模块的。
提供程序元数据主要用于官方模块由与提供程序相同的供应商开发的情况,允许供应商通过提供程序间接获取每个模块的使用统计信息。因此,本文档从提供程序开发人员而非模块开发人员的角度进行介绍。
此页面涵盖了 OpenTofu 的技术细节。你不必了解这些细节才能有效地使用 OpenTofu。这些细节在此处记录,供在高级功能方面工作的模块作者和提供程序开发人员使用。
此功能仍被视为实验性的,任何利用它的人应该 与 OpenTofu 团队协调,帮助团队了解该功能的使用方式,并确保在功能开发过程中考虑到他们的用例。
定义模式
在提供程序能够接收来自模块的信息之前,提供程序必须严格定义它可以接受的数据。你可以通过在你的 schema.Provider
结构上设置 ProviderMeta
属性来实现。它的值与提供程序配置类似:一个字符串映射到描述这些字符串接受的值的 schema.Schema
。
使用数据
当 OpenTofu 调用你的提供程序时,你可以使用 schema.ResourceData
(你的 Create
、Read
和 Update
函数已经使用它)来访问正在传递的提供程序元数据。首先定义一个与你的模式匹配的结构,然后在你的 schema.ResourceData
上调用 GetProviderSchema
方法,并将指向该类型变量的指针传递给它。该变量将用提供程序元数据填充,如果解析数据到结构时出现问题,则会返回错误。
在模块中指定数据
要在你的模块中包含数据,请在模块的 terraform
块下创建一个 provider_meta
嵌套块,并使用它试图传递信息的提供程序的名称。
terraform {
provider_meta "my-provider" {
hello = "world"
}
}
provider_meta
块必须与提供程序定义的模式匹配。
对你的模块进行版本控制
任何利用此功能的模块都必须确保提供的提供程序元数据与提供程序中定义的模式匹配,并且正在运行的 OpenTofu 版本支持提供程序元数据功能。因此,建议任何利用此功能的模块都应指定 OpenTofu 的最低版本为 0.13.0 或更高,以及它指定元数据的每个提供程序的最低版本,作为提供程序支持使用该模式的第一个版本。