В teraform есть ли способ обновить sh состояние ресурса с помощью файлов TF без использования команд консоли? - PullRequest
0 голосов
/ 07 января 2020

У меня есть требование обновить sh состояние ресурса "ibm_is_image" с использованием файлов TF без использования команд консоли?

Я знаю, что мы можем импортировать состояние ресурса, используя «импорт terraform». Но я должен сделать то же самое, используя Ia C в файлах TF.

Как этого добиться?

Пример:

В рабочей области 1 я создаю ресурс "f5_custom_image", который впоследствии удаляется из командной строки. В рабочей области2 тот же код в TF-файле будет предполагать, что «f5_custom_image» уже существует, и он не может прочитать пользовательский ресурс изображения. Итак, мой код должен обновлять sh состояние terraform этого ресурса для каждого выполнения "terraform apply":

resource "ibm_is_image" "f5_custom_image" {
  depends_on       = ["data.ibm_is_images.custom_images"]
  href             = "${local.image_url}"
  name             = "${var.vnf_vpc_image_name}"
  operating_system = "centos-7-amd64"

  timeouts {
    create = "30m"
    delete = "10m"
  }
}

1 Ответ

0 голосов
/ 08 января 2020

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

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

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

Это приводит к созданию и развертыванию конвейера с помощью следующих шагов:

  • Используйте отдельное программное обеспечение для построения образа, чтобы создать образ, и запишите идентификатор, откуда он может быть получен, используя источник данных в Terraform.
  • Запустите terraform apply, чтобы обновить долгоживущую инфраструктуру для использования нового образа. Конфигурация Terraform должна включать в себя блок data для считывания идентификатора изображения с того места, где оно было записано на предыдущем шаге.
  • При желании уничтожить изображение с помощью программного обеспечения вне Terraform после завершения Terraform.

При реализации конвейера, подобного этому, необязательно, но распространено также учитывать процесс «отката» для использования в случае неисправности нового изображения:

  • Сброс идентификатора записанного изображения, который Terraform выполняет чтение с идентификатора, который был сохранен перед новым этапом сборки.
  • Запустите terraform apply, чтобы обновить долгоживущую инфраструктуру обратно, используя старый образ.

Конечно, поддержка этого потребует сохранения предыдущего образа достаточно долго, чтобы доказать, что новый образ функционирует правильно, поэтому для нормального конвейера сборки и развертывания необходимо будет сохранять хотя бы одно историческое изображение за цикл для отката. С учетом вышесказанного, если у вас есть возможность быстро воссоздать предыдущее изображение во время отката, тогда этот специальный рабочий процесс не является строго необходимым: вместо этого вы можете вместо этого реализовать откат, «прокручивая вперед» изображение, созданное в предыдущей конфигурации.

Примером пакета программного обеспечения, обычно используемого для подготовки изображений для использования с Terraform у других поставщиков облачных услуг, является HashiCorp Packer , но, к сожалению, похоже, что он не поддерживает IBM Cloud, поэтому вам, возможно, придется поискать для некоторого подобного программного обеспечения, которое поддерживает IBM Cloud, или напишите что-нибудь самостоятельно, используя IBM Cloud SDK.

...