1 回答
TA贡献1840条经验 获得超5个赞
声明标头中给出的资源名称用于 Terraform 自己的跟踪,并且不可用于提供程序代码。
造成这种情况的一个重要原因是,所讨论的名称本身没有用:它仅在完整资源实例地址的上下文中有用,在本例中是有用的,但在更实际的配置中可能会更复杂,example_server.bob
例如example_server.bob[0]
,module.foo.example_server.bob
, module.foo["bar"].example_server.bob[15]
, 等
如果由 表示的远程对象类型需要远程系统中的example_server
唯一名称,则建模的方法是为资源声明一个参数(通常称为,但您可以将其命名为对相关系统有意义的任何名称)并具有用户选择将其设置为:name
resource "example_server" "bob" { name = "bob"}
用户可能决定将这两个名称设置为与我上面显示的相同,但在实际配置中很少合适,因为通常name
属于远程系统中比 Terraform 配置中的资源名称更广泛的命名空间,因此用户将希望将其设置为包含一些附加上下文的名称,以确保适当的唯一性,以避免单独配置和同一配置中单独模块之间的冲突。
如果您想使用 name 参数值作为 id 那么您可以将其复制过来:
d.SetId(d.Get("name"))
这是在不为每个对象分配代理键,而是使用对象的唯一名称作为唯一标识符的系统中表示对象的常见选择。
Terraform 在每次应用后将您返回的数据与保存的状态快照中的完整资源地址相关联,因此作为提供程序开发人员,您根本不需要担心资源地址:Terraform 将为您提供上次返回的任何数据以便您可以用它来计划下一步的操作。
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报