Spec-Zone.ru › OpenTofu 1.11

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

Экспериментальная функция

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

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

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

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

Блок кода
$ tofu plan -generate-config-out=generated_resources.tf

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

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

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

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

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

Блок кода
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 отобразит план импорта ресурса и файл, в котором OpenTofu сгенерировал конфигурацию на основе этого плана.

Блок кода
$ 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.

Блок кода
resource aws_iot_thing "bar" {
  name = "foo"
}

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

Сгенерированные подсказки​

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

Блок кода
resource "test_resource" "test" {
  attr1 = null # sensitive
  attr2 = null # write-only
  attr3 = null # sensitive write-only
}

4. Примените изменения​

Выполните tofu apply, чтобы импортировать инфраструктуру.

Блок кода
$ 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 отобразит ошибку, подобную приведенной ниже, если он не получит значения атрибутов ресурса при генерации конфигурации.

Блок кода
$ 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.11/language/import/generating-configuration/

Spec-Zone.ru

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