- OpenTofu 语言
- 函数
- uuidv5
uuidv5
函数
uuidv5
生成一个基于名称的 UUID,如 RFC 4122 第 4.3 节 中所述,也称为“版本 5”UUID。
uuidv5(namespace, name)
与 uuid
生成的伪随机 UUID 不同,基于名称的 UUID 来自命名空间和名称,如果命名空间和名称不变,则每次都会生成相同的 UUID 值。
基于名称的 UUID 命名空间本身就是 UUID,但为了便于阅读,此函数接受一些关键字作为 RFC 4122 分配的命名空间的别名
关键字 | 命名空间 ID | 名称格式 |
---|---|---|
"dns" | 6ba7b810-9dad-11d1-80b4-00c04fd430c8 | 完全限定的 DNS 域名。 |
"url" | 6ba7b811-9dad-11d1-80b4-00c04fd430c8 | 在 RFC 3986 中定义的任何有效 URL。 |
"oid" | 6ba7b812-9dad-11d1-80b4-00c04fd430c8 | ISO/IEC 对象标识符 |
"x500" | 6ba7b814-9dad-11d1-80b4-00c04fd430c8 | X.500 区分名称 |
要使用上表中未包含的任何其他命名空间,请以通常的 UUID 字符串格式在第一个参数中直接传递其分配的命名空间 ID。
示例
尽可能使用命名空间关键字,以便将来阅读者更容易理解其意图。
> uuidv5("dns", "www.opentofu.org")
df1e675d-b743-5f6c-9952-6311d0f141df
> uuidv5("url", "https://www.opentofu.org/")
ace93eea-1a2c-5eed-b41b-718be15d2e50
> uuidv5("oid", "1.3.6.1.4")
af9d40a5-7a36-5c07-b23a-851cd99fbfa5
> uuidv5("x500", "CN=Example,C=GB")
84e09961-4aa4-57f8-95b7-03edb1073253
命名空间关键字被视为等同于其对应的命名空间 UUID,在某些特殊情况下,使用 UUID 形式可能更合适。
> uuidv5("6ba7b810-9dad-11d1-80b4-00c04fd430c8", "www.opentofu.org")
df1e675d-b743-5f6c-9952-6311d0f141df
如果您希望使用 RFC 4122 之外定义的命名空间,则必须使用命名空间 UUID,因为没有相应的关键字可用。
> uuidv5("743ac3c0-3bf7-4a5b-9e6c-59360447c757", "LIBS:diskfont.library")
ede1a974-df7e-5f17-84b9-76208818b2c8
使用原始 UUID 命名空间时,请考虑在表达式旁边包含一条注释,以人类可理解的方式指示此命名空间代表什么,例如通过引用定义它的标准。
相关函数
uuid
,它生成伪随机 UUID。