【问题标题】:format ASCII number to ASCII Character in terraform将 ASCII 数字格式化为 terraform 中的 ASCII 字符
【发布时间】:2023-01-28 09:30:19
【问题描述】:
在 terraform 中,有没有办法将类型为 int 的 ASCII 值格式化为相应的 ASCII 字符作为 char?
地形版本:v0.13.7
device_name = "${format ("xvd%c", 98)}" #xvdb
我尝试使用 %c 但抛出如下错误
错误:函数调用错误
在 ec2.tf 第 82 行,在资源“aws_volume_attachment”“app”中:82:
device_name = "${format ("xvd%c", 98)}" #xvdb
调用函数“格式”失败:“%c”中不支持格式动词“c”
在偏移量 3 处。
【问题讨论】:
标签:
terraform
terraform-provider-aws
【解决方案1】:
Terraform 没有将数字解释为任何特定字符编码中的字符的直接函数。 Terraform 语言不会公开字符串在内存中的编码方式的细节。
您的示例表明您的目标是从一个整数映射到一个字母,以用作 EC2 卷附件的设备名称。我认为使用 Terraform 满足这一需求的最直接的答案是手写(或者,如果您愿意,使用一次性脚本生成)查找表:
locals {
device_names = tolist([
"xvda",
"xvdb",
"xvdc",
"xvdd",
# (and so on for however many devices you expect to need to support,
# presumably up to "z" at the worst)
])
}
一个更“棘手”的选项——我个人不会使用它,因为它看起来不透明并且未来的读者更难理解——将生成一些包含所需字符的转义序列的 JSON,然后解析该 JSON:
jsondecode(format(""\u%04x"", 98))
这实际上使用 Unicode 编码值而不是 ASCII 编码值,但是前 128 个 ASCII 值与前 128 个 Unicode 值匹配,因此只要您只包含 0-127 范围内的值,这应该是等效的。