亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取 terraform 提供程序中的資源名稱

如何獲取 terraform 提供程序中的資源名稱

Go
RISEBY 2023-08-07 14:33:25
我嘗試獲取 HCL 中配置的資源名稱,但需要自定義提供程序的 go 代碼中的值。resource "example_server" "bob" {  name = "server"}在 golang 代碼中我想用作bobd.SetId() 的值func resourceExsampleServerCreate(d *schema.ResourceData, meta interface{}) error {  // do some stuff   d.SetId("bob")}計劃是用bob變量替換 的硬編碼值;)
查看完整描述

1 回答

?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

聲明標頭中給出的資源名稱用于 Terraform 自己的跟蹤,并且不可用于提供程序代碼。

造成這種情況的一個重要原因是,所討論的名稱本身沒有用:它僅在完整資源實例地址的上下文中有用,在本例中是有用的,但在更實際的配置中可能會更復雜,example_server.bob例如example_server.bob[0],module.foo.example_server.bobmodule.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 將為您提供上次返回的任何數據以便您可以用它來計劃下一步的操作。


查看完整回答
反對 回復 2023-08-07
  • 1 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號