TF Provider 是否应该处理 409 状态码?

Shall TF Provider handle 409 status code?

我们假设有一个名为 bar 的现有资源 foo,然后有一个用于创建这些资源的 TF 提供程序,因此用户尝试创建

resource "foo" "example" {
   name = "bar"
}

并且当用户运行 terraform apply 时,他们会收到 409 状态代码(在来自 TF 提供程序的内部 POST 调用之后),因为这样的资源已经存在。

TF Provider 是否可以自动处理它并找出已经存在完全相同的资源,或者失败 409 让用户手动找出它是可以的?

从编程的角度来看,return任何错误都足以diag.Diagnostics,参见tutorial how to implement the create function

从合规的角度来看,您只需要在uploading your provider to Terraform Registry时添加文档。对于您的错误消息的有用程度没有任何限制。

但总的来说,建议尽可能给用户最好的反馈。当您作为提供者程序员只需编写一次此逻辑以保存您的每个(希望)许多提供者消费者每次遇到 409.

时,这一点尤其正确。

您可以以 AWS 提供商为例,它是 mentioned by Hashicorp as reference provider 面向新提供商开发人员的。如果您为已存在的 AWS S3 存储桶创建资源,它会向您显示此错误消息:

Error creating S3 bucket: BucketAlreadyOwnedByYou: Your previous request to create the named bucket succeeded and you already own it.

如果您改为尝试创建已由其他人创建的 S3 存储桶(因为 S3 存储桶的名称在 AWS 中需要全局唯一),则错误消息指出:

Error creating S3 bucket: BucketAlreadyExists: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.

由于 terraform 本身以及至少由 Hashicorp 创建的所有提供程序都有非常 self-explanatory 的错误消息,我建议您也这样做。