簡體   English   中英

Terraform Openstack:在創建期間附加網絡接口

[英]Terraform Openstack: Attach network interface during creation

我想在 openstack 中創建一個僅附加預定義網絡接口的實例。 我可以訪問 openstack,我知道網絡接口 ID/名稱。

創建實例后,我可以簡單地附加接口。 這樣,它將從池中隨機分配一個 IP,然后連接網絡接口。 那不是我想要的。

如開頭所述,我想在構建實例時附加接口。

編輯 - 示例代碼:

主機創建:

resource "openstack_compute_instance_v2" "example_host" {
  count =  1
  name = example-host
  image_name = var.centos_7_name
  flavor_id = "2"
  key_pair = "key"
}

接口貼:

resource "openstack_compute_interface_attach_v2" "example_interface_attach" {
  instance_id = openstack_compute_instance_v2.example_host[0].id
  port_id = "bd858b4c-d6de-4739-b125-314f1e7041ed"
} 

這行不通。 Terraform 返回錯誤:

錯誤:創建 OpenStack 服務器時出錯:訪問 [POST 服務器] 時應有 HTTP 響應代碼 [],但得到 409 {"conflictingRequest": {"message": "Multiple possible networks found, use a Network ID to be more specific." , "代碼": 409}}

回到我最初的查詢:我想部署一個新主機並附加一個網絡接口。 結果應該是只有一個 IP 地址的主機,即我附加的那個。

該錯誤似乎是由實例啟動產生的。 如果有多個網絡可用,OpenStack(不是 Terraform)堅持使用一個網絡。 從 OpenStack 的角度來看,您有多種解決方案。 袖手旁觀,我看到三個:

從微版本 2.37 開始,Nova API 允許您將“none”指定為網絡,在這種情況下,實例運行,但啟動后未連接。

或者,在端口上放置 IP 地址后,在端口而不是網絡上啟動實例。 使用openstack客戶端:

openstack port create --network <network> --fixed-ip subnet=<subnet>,ip-address=<ip-address> 
openstack server create ... --port <port-ip> ...

我認為這是最好的解決方案。

另一種解決方案是在啟動實例時指定一個網絡和一個固定的 IP 地址。 命令行:

openstack server create ... --nic NET-UUID,v4-fixed-ip=172.16.7.8 ...

不幸的是,我不知道 Terraform 是否支持這些解決方案。 我會嘗試將port_id添加到resource "openstack_compute_instance_v2" "example_host"塊中。

我找到了解決方案,而且非常簡單。 您可以清楚地將端口 ID 添加到網絡塊中。 我之前已經嘗試過,但失敗了。 我可能提供了錯誤的 ID。

##Create hosts
resource "openstack_compute_instance_v2" "test_host" {
  count =  1
  name = format("test-host-%02d", count.index + 1)
  image_name = var.centos_7_name
  flavor_id = "2"
  key_pair = "key"

  network {
    port = "<port-id>"
  }
 }

這是一個額外的解決方案,消除了提供錯誤 ID 的可能性。

##Create hosts
resource "openstack_compute_instance_v2" "test_host" {
  count =  1
  name = format("test-host-%02d", count.index + 1)
  image_name = var.centos_7_name
  flavor_id = "2"
  key_pair = "key"

  network {
    port = data.openstack_networking_port_v2.port_1.id
  }
 }

data openstack_networking_port_v2 "port_1" {
  name = "switch-port-208.37"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM