Рейтинг:0

ошибка применения terraform уже существует на нетронутых ресурсах

флаг gy

Я начинаю новый проект terraform, следуя официальному руководству:

https://learn.hashicorp.com/tutorials/terraform/gke?in=terraform/kubernetes&utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS&_ga=2.91746777.2118895439.1637849824-960084622.163784982

Мне удалось заставить его работать. (Я запускаю его как часть задачи сборки облака Google, запускаемой при фиксации)

Однако, если я что-то изменю в ресурсе (например, я заменю "gke_num_nodes" по умолчанию с 2 на 1), при запуске применить терраформ опять вот что получаю:


План: 4 добавить, 0 изменить, 0 уничтожить.

Изменения в выходах:
  + kubernetes_cluster_host = (известно после применения)
  + kubernetes_cluster_name = "рабочая область-авто-gke"
  + project_id = "рабочее пространство-авто"
  + регион = "европа-запад4"
google_compute_network.vpc: Создание...
·
â Ошибка: Ошибка при создании сети: googleapi: Ошибка 409: Ресурс «projects/workspace-auto/global/networks/workspace-auto-vpc» уже существует, уже существует
✓ 
с google_compute_network.vpc,
✓ в строке 15 vpc.tf, в ресурсе "google_compute_network" "vpc":
15: ресурс "google_compute_network" "vpc" {
✓ 
âµ

Есть ли способ заставить его не пытаться воссоздать существующие нетронутые ресурсы?

Мой облачная сборка.json составляет:

{
  "шаги": [
    {
      "name": "hashicorp/terraform",
      "точка входа": "/bin/sh",
      "аргументы": [
        "./cloudbuild/prepare-terraform.sh"
      ]
    }
  ],
  "logsBucket": "gs://my-bucket/logdir",
  "serviceAccount": "projects/my-proj/serviceAccounts/[email protected]"
}

с подготовить-terraform.sh будучи просто

инициализация терраформирования
план терраформирования
terraform применить -автоматическое одобрение
Рейтинг:2
флаг cn

Если вы используете Terraform для создания ресурсов, выполните НЕТ изменять их вне Terraform.

Если вы измените что-то вручную, Terraform попытается вернуть это так, как это объявляет HCL, и так, как Terraform сохранил это.

Это называется декларативный. Вы пытаетесь сделать Terraform динамичным, что в первую очередь побеждает использование Terraform.

флаг gy
Модификация, которую я сделал, была внутри файлов terraform, а не снаружи. Просто, когда я запускаю план терраформирования / применение, он попытается создать все с нуля, даже если он не изменился, и вызовет ошибку
Рейтинг:1
флаг gy

Состояние терраформирования должно храниться там, где оно доступно для всех сборок. Например, в облачной корзине Google, как показано здесь: https://www.terraform.io/docs/language/settings/backends/gcs.html

Ответить или комментировать

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