Terraform auth не работает при добавлении ресурсов - PullRequest
0 голосов
/ 18 сентября 2018

Я хотел попробовать terraform в нашей среде OpenStack.Я попытался настроить его, и он работает, когда определено только следующее:

provider "openstack" {
  user_name   = "test"
  tenant_name = "test"
  password    = "testpassword"
  auth_url    = "https://test:5000/v3/"
  region      = "test"
}

Я могу без проблем запустить план terraform:

Без изменений.Инфраструктура современна.Это означает, что Terraform не обнаружил никаких различий между вашей конфигурацией и существующими физическими ресурсами.В результате не нужно выполнять никаких действий.

Когда я пытаюсь добавить ресурс:

resource "openstack_compute_instance_v2" "test" {
  name            = "test_server"
  image_id        = "test_id123"
  flavor_id       = "3"
  key_pair        = "test"
  security_groups = ["default"]

  network {
    name = "Default Network"
  }
}

Когда я запускаю план terraform, я теперь получаю

Ошибка: план выполнения ошибки: произошла 1 ошибка (ы): provider.openstack: Ошибка аутентификации

1 Ответ

0 голосов
/ 19 сентября 2018

Аутентификация работает.Что-то в вашем provider разделе неверно.

Terraform не проверяет информацию provider, когда resource не использует ее.

Я проверил ваши выводы, а затем сделал еще один шаг вперед.Я создал два провайдера, один для AWS и один для OpenStack, используя ваш пример.Затем я добавил ресурс для создания AWS VPC.Мои учетные данные AWS были правильными.Когда я запустил terraform plan, он вернул план действий по созданию VPC.Он не проверял поддельные учетные данные OpenStack.

Еще одна вещь: если для provider есть resource, он всегда использует учетные данные, даже если не нужно ничего делать.

provider "aws" {
  access_key = "<redacted>"
  secret_key = "<redacted>"
  region     = "us-east-1"
}

provider "openstack" {
  user_name   = "test"
  tenant_name = "test"
  password    = "testpassword"
  auth_url    = "https://test:5000/v3/"
  region      = "test"
}


/* Create VPC */
resource "aws_vpc" "default" {
  cidr_block    = "10.200.0.0/16"
  enable_dns_support = true
  enable_dns_hostnames = true
  tags {
    Name = "testing"
  }
}

Произвел следующий вывод, подтверждающий, что OpenStack provider не был проверен:

$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.


------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  + aws_vpc.default
      id:                               <computed>
      arn:                              <computed>
      assign_generated_ipv6_cidr_block: "false"
      cidr_block:                       "10.200.0.0/16"
      default_network_acl_id:           <computed>
      default_route_table_id:           <computed>
      default_security_group_id:        <computed>
      dhcp_options_id:                  <computed>
      enable_classiclink:               <computed>
      enable_classiclink_dns_support:   <computed>
      enable_dns_hostnames:             "true"
      enable_dns_support:               "true"
provider "aws" {
      instance_tenancy:                 "default"
      ipv6_association_id:              <computed>
      ipv6_cidr_block:                  <computed>
      main_route_table_id:              <computed>
      tags.%:                           "1"
      tags.Name:                        "testing"


Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
...