команда «terraform providers» запутывает ресурсы для поставщиков

#plugins #terraform

#Плагины #terraform

Вопрос:

Я учусь разрабатывать поставщика terraform. Я следую этому удивительному руководству, составленному hashicorp: https://learn.hashicorp.com/tutorials/terraform/provider-use?in=terraform/providers#create-order

Terraform init сработало, когда я добавил required_providers блок. Однако, как только я добавил ресурс и сделал terraform apply , apply завершается с ошибкой «Не удалось загрузить плагин». После этой ошибки, когда я запускаю terraform providers отладку, в нем указаны как поставщик, так и ресурс как требуемые поставщики.

Версия Terraform, которую я использую: 0.13.5

Ниже приведен код, который я использовал:

     required_providers {
      hashicups = {
          versions = ["0.3"]
          source = "hashicorp.com/edu/hashicups"
      }
    }
}

resource "haschicups_order" "edu" {
  items {
    coffee {
      id = 3
    }
    quantity = 2
  }
  items {
    coffee {
      id = 2
    }
    quantity = 2
  }
}

output "edu_order" {
  value = haschicups_order.edu
}```

```% terraform providers

Providers required by configuration:
.
├── provider[hashicorp.com/edu/hashicups]
└── provider[registry.terraform.io/hashicorp/haschicups]```

 

Комментарии:

1. Исторически сложилось terraform providers так, что подкоманда действительно несколько сбита с толку локально созданными и загруженными поставщиками. Похоже, что это поведение сохраняется.

2. Ошибки Terraform с «Не удалось загрузить плагин», и указанная причина заключается в том, что «конфигурация предоставила необходимые плагины, которые не могут быть найдены, не удовлетворяют ограничениям версии». Я уверен, что эта ошибка ссылается на ресурс, который terraform вводит в заблуждение как поставщика

Ответ №1:

Похоже, вы использовали неправильное имя типа ресурса для ресурса: вы написали haschicups_order вместо hashicups_order .

Поскольку вы не объявили поставщика с локальным именем haschicups , Terraform предполагает, что этот тип ресурса должен принадлежать названному поставщику hashicorp/haschicups с помощью того же механизма, который Terraform позволяет объявлять aws_instance ресурс без явного объявления поставщика AWS.

Если вы исправите свое имя типа ресурса, чтобы оно имело тот же префикс, что и локальное имя поставщика, тогда Terraform должен связать ресурс с поставщиком, как вы ожидали:

 resource "hashicups_order" "edu" {
  items {
    coffee {
      id = 3
    }
    quantity = 2
  }
  items {
    coffee {
      id = 2
    }
    quantity = 2
  }
}
 

Комментарии:

1. Спасибо, Мартин! Позже я обнаружил, что мне нужно использовать префикс поставщика, чтобы ресурс был распознан как часть поставщика. Также спасибо, что указали мне на исправление в имени поставщика!