使用 python 计算 aws_volume_attachment ID
Calculate aws_volume_attachment ID using python
我正在使用 python(boto3) 更新 Terraform 状态文件,以便它可以反映 AWS 中的现有资源,我遇到了仅存在于 Terraform 中的资源 aws_volume_attachment,ID 是使用以下属性的哈希值计算的:instance ID,volume ID和设备名称。
https://github.com/hashicorp/terraform/blob/73dbded87ea739a2fbcfd83150ac09633df659c0/builtin/providers/aws/resource_aws_volume_attachment.go#L244-L251
我尝试执行以下操作,这样我就可以拥有与状态文件中相同的 ID,在我的情况下应该是 vai-437263023 但我得到的是 vai-3795101912 代替。
package main
import (
"bytes"
"fmt"
"hash/crc32"
)
func String(s string) int {
v := int(crc32.ChecksumIEEE([]byte(s)))
if v >= 0 {
return v
}
if -v >= 0 {
return -v
}
return 0
}
func main() {
// Expected: vai-437263023
// Received: vai-3795101912
var buf bytes.Buffer
buf.WriteString(fmt.Sprintf("%s-", "/dev/sdb"))
buf.WriteString(fmt.Sprintf("%s-", "i-06754cada7514bb34"))
buf.WriteString(fmt.Sprintf("%s-", "vol-028e997ae79e3a8ff"))
fmt.Printf("vai-%d", String(buf.String()))
}
如何获得与状态文件中相同的 ID?以及如何使用 python 而不是 GO 来计算相同的 ID?
我检查了几个提供程序版本和 Terraform 版本,您的代码每次都运行良好!
Python3:
>>> import binascii
>>> binascii.crc32(bytes('{}-{}-{}-'.format('/dev/sdb','i-06754cada7514bb34','vol-028e997ae79e3a8ff'), 'utf-8'))
3795101912
还有那个负数检查。它是 func ChecksumIEEE(data []byte) uint32
所以在 32 位平台上它只能是负数 int
。不过,这样的平台会将您的哈希值计算为 499865384,所以这不是极端情况。
我正在使用 python(boto3) 更新 Terraform 状态文件,以便它可以反映 AWS 中的现有资源,我遇到了仅存在于 Terraform 中的资源 aws_volume_attachment,ID 是使用以下属性的哈希值计算的:instance ID,volume ID和设备名称。 https://github.com/hashicorp/terraform/blob/73dbded87ea739a2fbcfd83150ac09633df659c0/builtin/providers/aws/resource_aws_volume_attachment.go#L244-L251
我尝试执行以下操作,这样我就可以拥有与状态文件中相同的 ID,在我的情况下应该是 vai-437263023 但我得到的是 vai-3795101912 代替。
package main
import (
"bytes"
"fmt"
"hash/crc32"
)
func String(s string) int {
v := int(crc32.ChecksumIEEE([]byte(s)))
if v >= 0 {
return v
}
if -v >= 0 {
return -v
}
return 0
}
func main() {
// Expected: vai-437263023
// Received: vai-3795101912
var buf bytes.Buffer
buf.WriteString(fmt.Sprintf("%s-", "/dev/sdb"))
buf.WriteString(fmt.Sprintf("%s-", "i-06754cada7514bb34"))
buf.WriteString(fmt.Sprintf("%s-", "vol-028e997ae79e3a8ff"))
fmt.Printf("vai-%d", String(buf.String()))
}
如何获得与状态文件中相同的 ID?以及如何使用 python 而不是 GO 来计算相同的 ID?
我检查了几个提供程序版本和 Terraform 版本,您的代码每次都运行良好!
Python3:
>>> import binascii
>>> binascii.crc32(bytes('{}-{}-{}-'.format('/dev/sdb','i-06754cada7514bb34','vol-028e997ae79e3a8ff'), 'utf-8'))
3795101912
还有那个负数检查。它是 func ChecksumIEEE(data []byte) uint32
所以在 32 位平台上它只能是负数 int
。不过,这样的平台会将您的哈希值计算为 499865384,所以这不是极端情况。