微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Terraform Openstack:在创建过程中附加网络接口

如何解决Terraform Openstack:在创建过程中附加网络接口

我想在 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 地址的主机,这是我附加的。

解决方法

该错误似乎是由实例启动生成的。如果有多个网络可用,OpenStack(而非 Terraform)会坚持使用网络。从 OpenStack 的角度来看,您有多种解决方案。从袖口上,我看到三个:

从 microversion 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"
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。