0

我想在 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": "找到多个可能的网络,使用更具体的网络 ID。" , "代码": 409}}

回到我最初的查询:我想部署一个新主机并附加一个网络接口。结果应该是只有一个 IP 地址的主机,即我附加的那个。

4

2 回答 2

0

该错误似乎是由实例启动产生的。如果有多个网络可用,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_idresource "openstack_compute_instance_v2" "example_host"块中。

于 2021-05-07T10:41:32.810 回答
0

我找到了解决方案,而且非常简单。您可以清楚地将端口 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"
}
于 2021-05-07T11:45:32.863 回答