HashiCorp发布了Terraform Plugin Framework的 1.0 版本。该框架改进并取代了Terraform Plugin SDKv2。它包括对验证器、路径表达式、嵌套属性、资源私有状态管理和自定义类型的支持。新框架中的提供者程序是用 Go 编写的可执行二进制文件。
Terraform 插件通过 RPC(远程过程调用)与 Terraform Core 一起工作。插件可用于公开特定服务(如云资源、SaaS 平台或 API)的实现。根据Brian Flad、Dave Parfitt和Vishnu Ravindra 的说法,新框架是对之前的 Terraform Plugin SDKv2 的改进包括:
插件框架的代码更易于维护和未来验证,它将作为未来 Terraform 插件开发特性和工具的基础。
该版本包括许多预构建的验证器,它们可以向用户提供关于语法、类型和可接受值的反馈。例如,用于检查字符串长度或确保数字在有效范围内的验证器。预构建的验证器可以在 Go 模块 terraform-plugin-framwork-validators
中找到。
可以使用框架定义的泛型类型对属性进行验证。Validators 字段应该提供一个验证列表,如下例所示:
schema.StringAttribute{
//……其他属性配置……
Validators: []validator.String{
// 这些是来自terraform-plugin-framework-validators的示例验证器
stringvalidator.LengthBetween(10, 256),
stringvalidator.RegexMatches(
regexp.MustCompile(`^[a-z0-9]+$`),
"must contain only lowercase alphanumeric characters",
),
},
}
路径表达式允许将属性之间的关系指定为相对路径。这些可以表示模式或基于模式的数据内的一个或多个实际路径。相对路径表达式是使用path.MatchRelative()函数启动的。
资源私有状态管理允许数据与状态一起存储,但会在 Terraform 计划中删除。HashiCorp 建议,这可以用于存储和检索不需要向用户显示的值,例如 API 调用的 ETag。提供者程序能够在创建、导入、规划、读取和更新操作期间保存这些数据。可以在执行删除、计划、读取和更新等操作期间读取数据。私有状态数据可以使用 GetKey
函数读取:
func (r *resourceExample) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
value, diags := req.Private.GetKey(ctx, "key")
resp.Diagnostics.Append(diags...)
if value != nil {
//值为[]byte.
...
}
}
虽然还会继续支持 Terraform Plugin SDKv2,但 HashiCorp 已经表示,新的 Terraform Plugin Framework 将会获得新功能和工具的优先权。可以使用迁移指南将插件从 Terraform Plugin SDKv2 迁移到新的 Terraform Plugin Framework。
基于插件框架的提供者程序可以向后兼容 Terraform 0.12 及更高版本。也可以选择使用新的Terraform Plugin Protocol版本 6。这将允许访问 Terraform 1.x 版本中的最新功能。有关该版本的更多详细信息,可以在博客文章或快速上手页面上找到。
作者介绍:
Matt 领导 InfoQ 的 DevOps 编辑团队。他是教育技术公司 D2L 的云平台副总裁,负责其基础设施和云平台团队。他关注的领域是 DevOps 和 SRE,并在企业规模上实施这些。
原文链接:
HashiCorp Terraform Plugin Framework Now Generally Available
领取专属 10元无门槛券
私享最新 技术干货