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 的错误消息,我建议您也这样做。
我们假设有一个名为 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 的错误消息,我建议您也这样做。