无法从 Terraform 启动 Openstack 实例

问题描述 投票:0回答:4

我正在尝试使用 Terraform 创建 OpenStack 实例,但出现以下错误:

Error applying plan:

1 error(s) occurred:

* openstack_compute_instance_v2.basic: Error creating OpenStack server: Invalid
request due to incorrect syntax or missing required parameters.

Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with

但相同的 Terraform 代码确实在我的 OpenStack 帐户中成功创建了安全组、密钥对和卷

这是我的 Terraform 代码:

provider "openstack" {
  user_name = "admin"
  tenant_name = "admin"
  password  = "admin"
  auth_url  = "http://my_IP():5000/v2.0"
}
resource "openstack_blockstorage_volume_v1" "myvol" {
  name = "myvol"
  size = 1
}
resource "openstack_compute_instance_v2" "basic" {
  name = "basic"
  image_id = "8ce1c922-ad0-81a3-823ea1b0af9b"
  flavor_id = "2"
  key_pair = "tf-keypair-1"
  security_groups = ["default"]

  metadata {
    this = "that"
  }

  network {
    name = "8b510300-610a--9cc3-6e76e33395b4"
  }
  volume {
    volume_id = "${openstack_blockstorage_volume_v1.myvol.id}"
  }
}
openstack terraform
4个回答
9
投票

直到最近,这条消息都很难调试。在 Terraform 的版本 0.8.8(更具体地说是为 OpenStack Terraform 提供程序启用 HTTP 日志记录改进)中,团队添加了 OS_DEBUG 环境变量,以帮助在此类情况下提供更多信息。一种使用方法如下:

TF_LOG=DEBUG OS_DEBUG=1 terraform apply ...

有一次我收到此消息,因为我忘记在 OpenStack 中为我正在使用的用户添加 ssh 密钥。


1
投票

来自您的配置:

network { name = "8b510300-610a--9cc3-6e76e33395b4"  }

您正在分配

name
但提供网络
id


0
投票

您必须仔细检查所有参数是否有拼写错误和/或不正确的值。 TF 不会为你做这些。

当您指定例如不存在的密钥对或网络名称时,就会发生这种情况(例如,在您的示例中,您指定了 ID 而不是网络名称)。


0
投票

您必须指定 block_device 块而不是 volume 块。

block_device {
    uuid        = "${openstack_blockstorage_volume_v1.myvol.id}"
    source_type = "volume"
}

或直接附加卷

resource "openstack_compute_volume_attach_v2" "attach_1" {
    instance_id = openstack_compute_instance_v2.basic.id
    volume_id   = openstack_blockstorage_volume_v2.myvol.id
}
© www.soinside.com 2019 - 2024. All rights reserved.