Terraform 提供者指定要拉取的 SDK 版本/不能使用 validation.StringInSlice type schema.SchemaValidateFunc as type SchemaValidateDiagFunc

Terraform Provider-specify version of SDK to pull / Cannot use validation.StringInSlice type schema.SchemaValidateFunc as type SchemaValidateDiagFunc

由于 this problem it looks like for providers you have to get a current version of the SDK (2.4.4 at time of post). This post 有很多关于如何导入包的特定版本的信息,但肯定每个提供者编写者都没有手动拉取最新版本的 SDK(或者他们是) ?

我是 Go/Terraform 的新手,所以也许我遗漏了一些明显的东西,但我发现的提供者(包括官方示例)有类似的东西:

import(
    "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
    "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
    "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)

当前版本不是 2 - 它是 2.4.4。现在我知道那些是本地路径,但让我感到困惑的是,当我 运行 类似 go get 的东西时,它会为我把它们拉下来。我尝试这样做:

"github.com/hashicorp/terraform-plugin-sdk/v2.4.4/helper/schema"

但是 go get 非常不喜欢那样。 go get 如何找到那些软件包版本?是否有一种导入语法可以让我获得最新版本或允许我更细粒度?在 运行ning go get 之后,我还没有找到一个好方法来判断我拥有的 SDK 版本,但是基于此错误消息:

看起来我有 2.0,因为据我所知,该错误已在较新版本的 SDK 中修复。

我明白了。该行为由 go.mod 文件控制。

在那里你会发现:

require (
    github.com/hashicorp/terraform-plugin-sdk v1.14.0 // indirect
    github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.1

如@JimB 所述,v2 是插件的 major versionv2.0.1 是 GitHub 个标签。将其更改为 v2.4.4 可获得所需的行为。