Terraform-创建OpenStack负载均衡器时出错:找不到资源

时间:2020-11-12 13:49:42

标签: terraform openstack terraform-provider-openstack

我正在尝试使用Terraform创建一个OpenStack负载均衡器,但是在terraform apply上出现以下错误:

错误:创建openstack_lb_loadbalancer_v2时出错:找不到资源

在资源中的load-balancer / main.tf第71行 “ openstack_lb_loadbalancer_v2”“ lb_1”:71:资源 “ openstack_lb_loadbalancer_v2”“ lb_1” {

我的模板如下所示。

resource "openstack_lb_loadbalancer_v2" "lb_1" {
  name          = "loadbalancer"
  vip_subnet_id = openstack_networking_subnet_v2.public.id
}

resource "openstack_lb_listener_v2" "listener_1" {
  name                      = "https"
  protocol                  = "TERMINATED_HTTPS"
  protocol_port             = 443
  loadbalancer_id           = openstack_lb_loadbalancer_v2.lb_1.id
  default_tls_container_ref = openstack_keymanager_container_v1.tls_1.container_ref
}

resource "openstack_networking_network_v2" "lb_network" {
  name = "lb-network"
  port_security_enabled = "true"
}

resource "openstack_networking_subnet_v2" "public" {
  name = "lb-subnet"
  network_id = openstack_networking_network_v2.lb_network.id
  cidr = "10.0.0.0/24"
  ip_version = 4
}

我不知道如何进一步调试。是否表示找不到vip_subnet_id?还是openstack_lb_loadbalancer_v2是未知资源类型?

我正在使用Terraform v0.13.5和terraform-provider-openstack v1.33.0。

更新

我通过Web界面手动创建了一个LB,现在我尝试通过Terraform CLI导入它,并得到以下响应

错误:无法导入不存在的远程对象

尝试将现有对象导入到时 openstack_lb_loadbalancer_v2.lb_1,提供程序检测到没有 存在具有给定ID的对象。只能存在的对象是 进口检查ID是否正确以及是否与ID相关联 提供者的配置区域或端点,或使用“地形应用” 为此资源创建一个新的远程对象。

我开始怀疑这可能是OpenStack服务器端的问题。

2 个答案:

答案 0 :(得分:2)

最后发现,您需要在openstack terraform提供程序设置中设置use_octiva = true。在此处查看相关文档:https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs#use_octavia

示例配置:

cat main.tf
provider "openstack" {
  user_name     = var.os_user_name
  tenant_name   = var.os_tenant_name
  password      = var.os_password
  auth_url      = var.os_auth_url
  region        = var.os_region
  endpoint_type = var.os_endpoint_type
  use_octavia   = true
}

以下是相关的错误报告:https://github.com/terraform-provider-openstack/terraform-provider-openstack/issues/1100

答案 1 :(得分:0)

要获取openstack_networking_subnet_v2.public.id用于

vip_subnet_id = openstack_networking_subnet_v2.public.id

定义

data "openstack_networking_subnet_v2" "public" {
...
}

以及

resource "openstack_networking_subnet_v2" "public" {
...
}