gpt4 book ai didi

python - 使用python计算aws_volume_attachment ID

转载 作者:行者123 更新时间:2023-12-03 10:09:06 25 4
gpt4 key购买 nike

我正在使用 python(boto3)更新Terraform的状态文件,以便它可以反射(reflect)AWS中的现有资源,而我遇到的资源 aws_volume_attachment 仅存在于Terraform中,ID是使用的哈希值来计算的以下属性:实例ID,卷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 - 使用python计算aws_volume_attachment ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66171773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com