Terraform не может создать виртуальную машину в провайдере openstack (подходящая конечная точка не найдена в каталоге услуг) - PullRequest
0 голосов
/ 18 марта 2019

У меня есть проект в terraform - провайдер "openstack" v1.16:

  provider "openstack" {
  auth_url = "${var.auth_url}"
  user_name = "${var.username}"
  password = "${var.password}"
  region = "${var.region}"
  project_domain_id = "${var.project_id}"
  project_domain_name = "${var.project_domain_name}"
  endpoint_type = "public"
}

И попробуйте создать вычислительный узел:

resource "openstack_compute_instance_v2" "terraform_test" {
  name = "test"
  region = "${var.region}"
  availability_zone = "nova"
  image_id = "${var.image}"
  flavor_name = "m1.medium"
  key_pair = "${var.ssh_key}"
  security_groups = ["default"]

  network {
    uuid = "${var.network}"
  }
}

"terraform plan" без каких-либо ошибок.

Когда я пытаюсь применить план, я получаю эту ошибку:

Error: Error applying plan:

1 error(s) occurred:

* openstack_compute_instance_v2.terraform_test: 1 error(s) occurred:

* openstack_compute_instance_v2.terraform_test: Error creating OpenStack compute client: No suitable endpoint could be found in the service catalog.

Когда я делаю

openstack catalog list

Я принимаю

 nova        compute   regionName
                         public: https://compute.$url:8774/v2.1
                       regionName   
                         admin: $url
                       regionName
                         internal: $url

 keystone    identity  regionName
                         internal: $url
                       regionName
                         admin: $url
                       regionName
                         public: https://auth.$url:5000/v2.0

Так что у меня есть конечная точка для вычислений (создать виртуальную машину)В чем проблема?

1 Ответ

0 голосов
/ 18 марта 2019

Я нашел решение: openstack предоставляет сценарий * -openrc.sh со всеми переменными среды для подключения:

# With the addition of Keystone we have standardized on the term **tenant**
# as the entity that owns the resources.
export OS_TENANT_ID=$ID
export OS_TENANT_NAME="$NAME"

# unsetting v3 items in case set
unset OS_PROJECT_ID
unset OS_PROJECT_NAME
unset OS_USER_DOMAIN_NAME

Я обнаружил, что использовал переменные для API v3, но разместил их в API v2. Поэтому я изменил имена переменных с одинаковыми значениями:

project_domain_id > tenant_id
project_domain_name > tenant_name

Провайдер теперь выглядит так:

provider "openstack" {
  auth_url = "${var.auth_url}"
  user_name = "${var.username}"
  password = "${var.password}"
  region = "${var.region}"
  tenant_name = "${var.tenant_name}"
  tenant_id = "${var.tenant_id}"
}

Теперь все отлично работает!

...