【问题标题】: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 范围内的值,这应该是等效的。

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 2023-03-10
      • 2011-03-16
      • 2014-10-21
      相关资源
      最近更新 更多