сбой terraform apply при создании уже существующего ресурса

#terraform #openstack #openstack-keystone #terraform-provider-openstack

#terraform #openstack #openstack-keystone #terraform-provider-openstack

Вопрос:

Я работаю над terraform с openstack в качестве поставщика облачных услуг. У меня естьdeploy.tf скрипт, создающий роль:

 resource "openstack_identity_role_v3" "role_example" {
  name = "creator"
}
  

Мой вывод о том, как terraform создает ресурсы:

  • Если роль не существует в openstack, terraform создает ее без проблем.
  • Если роль существует в openstack и создается с помощью того же сценария terraform, т.Е.. в terraform.state есть запись об этом, terraform возвращается без ошибок.

моя проблема заключается в следующем: если я удаляю файл состояния или роль создается из групп вручную или каким-либо другим сценарием terraform.Я получаю следующую ошибку:

 * openstack_identity_role_v3.role_example: Error creating OpenStack role: Expected HTTP response code [201] when accessing [POST https://<example-openstack-url>/v3/roles], but got 409 instead
{"error": {"message": "Conflict occurred attempting to store role - Duplicate Entry", "code": 409, "title": "Conflict"}}
  

Я пытаюсь найти обходной путь, чтобы, если роль не существует, terraform apply создать ее, и если она уже существует, несмотря на то, что она была создана вручную или любым другим сценарием развертывания terraform, terraform пропускает ее создание и не выдает ошибку.

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

1. Запустите импорт terraform

2. Импорт, безусловно, помогает при создании вручную, но управление им в другом модуле TF или удаление файла состояния — это обстоятельства, которые не должны возникать.

3. спасибо за предложение. Что я вижу, так это то, что для «импорта terraform» требуется два аргумента; «адрес» и «ИДЕНТИФИКАТОР». Я хочу достичь того же самого без предоставления идентификатора. потому что, если роль не существует, я не могу знать значение Id.

4. Идентификатор является ресурсом в вашей конфигурации.

5. «terraform import openstack_identity_role_v3.role_example <ID>» — это правильный синтаксис. Пожалуйста, помогите мне заменить значение ID. Это работает, если я предоставляю жестко заданный идентификатор хэша, но я хочу предоставить его программно. Спасибо