Spec-Zone.ru › OpenTofu 1.12

Генерация конфигурации

Экспериментально

Генерация конфигурации доступна в OpenTofu v1.6 в качестве экспериментальной функции. В последующих минорных версиях могут измениться форматирование сгенерированной конфигурации и поведение команды tofu plan при использовании флага -generate-config-out.

OpenTofu может генерировать код для ресурсов, определенных в блоках import, которых еще нет в вашей конфигурации. OpenTofu создает HCL-код в качестве шаблона, содержащего наиболее вероятные, по оценке OpenTofu, значения для каждого аргумента ресурса.

Взяв за основу сгенерированный OpenTofu HCL-код, рекомендуется итеративно довести конфигурацию до идеального вида: удалить ненужные атрибуты, скорректировать значения других и при необходимости распределить блоки resource по файлам и модулям.

Чтобы сгенерировать конфигурацию, выполните команду tofu plan с флагом -generate-config-out и укажите путь к новому файлу. Не указывайте путь к уже существующему файлу, иначе OpenTofu вернет ошибку.

Code Block
$ tofu plan -generate-config-out=generated_resources.tf

Если какие-либо ресурсы, указанные в блоке import, отсутствуют в вашей конфигурации, OpenTofu сгенерирует и запишет конфигурацию для этих ресурсов в generated_resources.tf.

Рабочий процесс​

Рабочий процесс генерации конфигурации аналогичен процессу работы с блоком import с добавлением этапа генерации конфигурации на шаге планирования. Затем вы можете просмотреть и изменить сгенерированную конфигурацию перед ее применением.

1. Добавьте блок import​

Добавьте блок import в вашу конфигурацию. Этот блок import может находиться в отдельном файле (например, import.tf) или в существующем конфигурационном файле.

Code Block
import {
  to = aws_iot_thing.bar
  id = "foo"
}

Аргумент to блока импорта указывает на адрес, который resource будет иметь в вашем файле состояния. Если адрес ресурса в состоянии совпадает с аргументом to блока import, OpenTofu попытается импортировать в этот ресурс. При последующем планировании OpenTofu будет знать, что для ресурсов, уже присутствующих в вашем состоянии, генерировать конфигурацию не требуется.

В качестве аргумента id блока импорта используется идентификатор импорта (import ID) этого ресурса.

Если в вашей конфигурации нет других ресурсов для выбранного провайдера, необходимо добавить блок provider, чтобы указать OpenTofu, какой провайдер следует использовать для генерации конфигурации. В противном случае OpenTofu выдаст ошибку, если не сможет определить нужный провайдер. Если вы добавите новый блок provider в конфигурацию, вам потребуется снова выполнить tofu init.

2. Создание плана и генерация конфигурации​

Чтобы OpenTofu сгенерировал конфигурацию для определенных вами блоков import, выполните команду tofu plan с флагом -generate-config-out= и указанием пути к новому файлу. OpenTofu отобразит план импорта вашего ресурса и имя файла, в котором была создана конфигурация на основе этого плана.

Code Block
$ tofu plan -generate-config-out=generated.tf

aws_iot_thing.bar: Preparing import... [id=foo]
aws_iot_thing.bar: Refreshing state... [id=foo]

OpenTofu will perform the following actions:

  # aws_iot_thing.bar will be imported
  # (config will be generated)
    resource "aws_iot_thing" "bar" {
        arn               = "arn:aws:iot:eu-west-1:1234567890:thing/foo"
        attributes        = {}
        default_client_id = "foo"
        id                = "foo"
        name              = "foo"
        version           = 1
    }

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

╷
│ Warning: Config generation is experimental
│ 
│ Generating configuration during import is currently experimental, and the generated configuration format may change in future versions.
╵

─────────────────────────────────────────────────────────────────────────────────────────────────  ─────────────────────────────────────────────────

OpenTofu has generated configuration and written it to generated.tf. Please review the configuration and edit it as necessary before adding it to version control.

3. Проверка сгенерированной конфигурации​

В приведенном выше примере OpenTofu создает конфигурацию в файле с именем generated.tf. Ниже приведен пример файла generated.tf.

Code Block
resource aws_iot_thing "bar" {
  name = "foo"
}

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

Подсказки в сгенерированном коде​

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

Code Block
resource "test_resource" "test" {
  attr1 = null # sensitive
  attr2 = null # write-only
  attr3 = null # sensitive write-only
}

4. Применение изменений​

Выполните команду tofu apply для импорта вашей инфраструктуры.

Code Block
$ tofu apply

aws_iot_thing.bar: Preparing import... [id=foo]
aws_iot_thing.bar: Refreshing state... [id=foo]

OpenTofu will perform the following actions:

  # aws_iot_thing.bar will be imported
    resource "aws_iot_thing" "bar" {
        arn               = "arn:aws:iot:eu-west-1:1234567890:thing/foo"
        attributes        = {}
        default_client_id = "foo"
        id                = "foo"
        name              = "foo"
        version           = 1
    }

Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
aws_iot_thing.bar: Importing... [id=foo]
aws_iot_thing.bar: Import complete [id=foo]

Apply complete! Resources: 1 imported, 0 added, 0 changed, 0 destroyed.

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

Ограничения​

Конфликтующие аргументы ресурсов​

При формировании плана OpenTofu генерирует конфигурацию для импортируемых ресурсов, запрашивая значения атрибутов ресурсов у провайдера. Для некоторых ресурсов со сложной схемой OpenTofu может оказаться не в состоянии составить корректную конфигурацию на основе этих значений.

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

Code Block
$ tofu plan -generate-config-out=generated.tf
╷
│ Error: Conflicting configuration arguments
│ 
│   with aws_instance.ubuntu,
│   on g.tf line 20, in resource "aws_instance" "ubuntu":
│   20:   ipv6_address_count                   = 0
│ 
│ "ipv6_address_count": conflicts with ipv6_addresses
╵

В приведенном выше примере OpenTofu все равно сгенерирует конфигурацию и запишет ее в generated.tf. Эта ошибка вызвана конфликтом между аргументами ipv6_address_count и ipv6_addresses. Ресурс поддерживает оба этих аргумента, но при его настройке необходимо выбрать только один из них. Вы можете устранить ошибку, удалив один из двух аргументов, а затем снова запустив tofu plan, чтобы убедиться в отсутствии других проблем.

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/import/generating-configuration/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API