【问题标题】:Terraform Openstack: Attach network interface during creationTerraform Openstack:在创建期间附加网络接口
【发布时间】:2021-05-07 08:16:11
【问题描述】:

我想在 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 服务器时出错:预期的 HTTP 响应代码 [] 访问 [POST 服务器] 时,却得到 409 {"conflictingRequest": {"message": "找到多个可能的网络, 使用网络 ID 更具体。", "code": 409}}

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

【问题讨论】:

  • 还有什么问题?你有 TF 代码要显示吗?
  • 当然,我将提供一些示例代码,但问题仍然存在:我想部署一个新主机并附加一个接口。最终的目标是主机只有与附加接口关联的 IP 地址,而没有其他 IP。

标签: terraform openstack terraform-provider-openstack


【解决方案1】:

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

【讨论】:

  • 感谢您的回复,感谢您再次检查 terraform 条目并找到了解决方案。我会回复我的问题。
【解决方案2】:

我找到了解决方案,而且非常简单。您可以清楚地将端口 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"
}

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 2018-03-22
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多