#terraform #openstack
#terraform #openstack
Вопрос:
У меня есть проект в terraform — provider «openstack» версии 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. OpenStack не использовался долгое, долгое время (и то с трудом), но в документах поставщика есть опция переопределения конечных точек, которая может быть полезна здесь. Это сопровождается большим предупреждением о том, что большинству людей это не нужно, но я не знаю, подходит ли ваша установка для этого.
Ответ №1:
Я нашел решение: 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}"
}
Теперь это работает нормально!